Go 言語演算子


Go 言語演算子

演算子は、プログラムの実行中に数学的演算または論理演算を実行するために使用されます。

Go 言語の組み込み演算子は次のとおりです:

  • 算術演算子

  • 関係演算子

  • 論理演算子

  • ビット演算子

  • 代入演算子

  • その他のオペレーター

次に、各オペレーターの紹介を詳しく見ていきましょう。


算術演算子

次の表は、Go 言語のすべての算術演算子のリストです。 A の値が 10、B の値が 20 であるとします。

演算子説明
+加算A + B 出力結果 30
-減算A - B出力結果 -10
* 乗算A * B 出力結果200
/除算B / A 出力結果2
%余りを求めるB % A 出力結果0
++ incrementA++ 出力結果 11
--decreaseA-- 出力結果 9

次の例は、各算術演算子の使用法を示しています。実行結果:

package main

import "fmt"

func main() {

   var a int = 21
   var b int = 10
   var c int

   c = a + b
   fmt.Printf("第一行 - c 的值为 %d\n", c )
   c = a - b
   fmt.Printf("第二行 - c 的值为 %d\n", c )
   c = a * b
   fmt.Printf("第三行 - c 的值为 %d\n", c )
   c = a / b
   fmt.Printf("第四行 - c 的值为 %d\n", c )
   c = a % b
   fmt.Printf("第五行 - c 的值为 %d\n", c )
   a++
   fmt.Printf("第六行 - c 的值为 %d\n", a )
   a--
   fmt.Printf("第七行 - c 的值为 %d\n", a )
}

関係演算子

次の表は、Go 言語のすべての関係演算子のリストです。 A の値が 10、B の値が 20 であるとします。

Operator==!=><>=<=

次の例は、関係演算子の使用方法を示しています:

第一行 - c 的值为 31
第二行 - c 的值为 11
第三行 - c 的值为 210
第四行 - c 的值为 2
第五行 - c 的值为 1
第六行 - c 的值为 22
第七行 - c 的值为 21

上記の実行結果の例:

package main

import "fmt"

func main() {
   var a int = 21
   var b int = 10

   if( a == b ) {
      fmt.Printf("第一行 - a 等于 b\n" )
   } else {
      fmt.Printf("第一行 - a 不等于 b\n" )
   }
   if ( a < b ) {
      fmt.Printf("第二行 - a 小于 b\n" )
   } else {
      fmt.Printf("第二行 - a 不小于 b\n" )
   } 
   
   if ( a > b ) {
      fmt.Printf("第三行 - a 大于 b\n" )
   } else {
      fmt.Printf("第三行 - a 不大于 b\n" )
   }
   /* Lets change value of a and b */
   a = 5
   b = 20
   if ( a <= b ) {
      fmt.Printf("第四行 - a 小于等于  b\n" )
   }
   if ( b >= a ) {
      fmt.Printf("第五行 - b 大于等于 b\n" )
   }
}

論理演算子

次の表は、Go 言語のすべての論理演算子のリストです。 A の値が True、B の値が False であると仮定します。

DescriptionInstance
2つの値が等しいかどうかをチェックし、等しい場合はTrueを返し、そうでない場合はFalseを返します。 (A == B) is False
は、2つの値が等しくないかどうかをチェックし、等しくない場合はTrueを返し、等しくない場合はFalseを返します。 (A != B) は True
左の値が右の値より大きいかどうかを確認し、大きい場合は True を返し、そうでない場合は False を返します。 (A > B) は False
左の値が右の値より小さいかどうかを確認し、小さい場合は True を返し、そうでない場合は False を返します。 (A < B) は True
左側の値が右側の値以上であるかどうかを確認し、そうであれば True を返し、それ以外の場合は False を返します。 (A >= B) は False
左の値が右の値以下かどうかを確認し、そうであれば True を返し、それ以外の場合は False を返します。 (A <= B) は True です
演算子説明インスタンス
&&論理AND演算子。 両方のオペランドが True の場合、条件は True となり、それ以外の場合は False になります。 (A && B) は False
|| 論理 OR 演算子です。 両方のオペランドが True の場合、条件は True であり、それ以外の場合は False です。 (A || B) は True
! 論理 NOT 演算子です。 論理 NOT 条件 条件が True の場合は False、それ以外の場合は True。 !(A && B) is True

次の例は、論理演算子の使用を示しています:

第一行 - a 不等于 b
第二行 - a 不小于 b
第三行 - a 大于 b
第四行 - a 小于等于  b
第五行 - b 大于等于 b

上記の実行結果の例:

package main

import "fmt"

func main() {
   var a bool = true
   var b bool = false
   if ( a && b ) {
      fmt.Printf("第一行 - 条件为 true\n" )
   }
   if ( a || b ) {
      fmt.Printf("第二行 - 条件为 true\n" )
   }
   /* 修改 a 和 b 的值 */
   a = false
   b = true
   if ( a && b ) {
      fmt.Printf("第三行 - 条件为 true\n" )
   } else {
      fmt.Printf("第三行 - 条件为 false\n" )
   }
   if ( !(a && b) ) {
      fmt.Printf("第四行 - 条件为 true\n" )
   }
}

ビット演算子

ビット演算子はメモリ内の整数に作用します。バイナリビットが演算されます。

次の表は、ビット演算子 &、|、および ^ の計算を示しています。 0

000010111111010011

A = 60; B = 13 と仮定します; その 2 進数は次のように変換されます:

第二行 - 条件为 true
第三行 - 条件为 false
第四行 - 条件为 true


C 言語でサポートされているビット演算子は次の表のとおりです。 A が 60、B が 13 であるとします。 その機能は、演算に含まれる対応する 2 つの数値のバイナリ AND を実行することです。

(A & B) 結果は 12、二進数は 0000 1100 です
>> 右シフト演算子 ">>" は 2 項演算子です。 n ビット右にシフトすると、2 の n 乗で除算されます。 その機能は、「>>」の左側にあるオペランドのすべての 2 進数を特定の桁数だけ右にシフトすることであり、「>>」の右側の数値は桁数を指定します。移動すること。 A >> 2 結果は 15 で、これはバイナリで 0000 1111 です

次の例は、論理演算子の使用法を示しています:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

上記の実行結果の例:

package main

import "fmt"

func main() {

   var a uint = 60	/* 60 = 0011 1100 */  
   var b uint = 13	/* 13 = 0000 1101 */
   var c uint = 0          

   c = a & b       /* 12 = 0000 1100 */ 
   fmt.Printf("第一行 - c 的值为 %d\n", c )

   c = a | b       /* 61 = 0011 1101 */
   fmt.Printf("第二行 - c 的值为 %d\n", c )

   c = a ^ b       /* 49 = 0011 0001 */
   fmt.Printf("第三行 - c 的值为 %d\n", c )

   c = a << 2     /* 240 = 1111 0000 */
   fmt.Printf("第四行 - c 的值为 %d\n", c )

   c = a >> 2     /* 15 = 0000 1111 */
   fmt.Printf("第五行 - c 的值为 %d\n", c )
}

代入演算子

次の表は、Go 言語のすべての代入演算子のリストです。

| ビット単位の OR 演算子「|」は二項演算子です。 その関数は、演算に含まれる 2 つの数値に対応する 2 進位相または (A | B) です。結果は 61 で、2 進数では 0011 1101 になります
^ ビットごとの XOR 演算子 "^" は次のようになります。二項演算記号。 その機能は、演算に含まれる 2 つの数値の対応する 2 進ビットの排他的論理和を実行することです。2 つの対応する 2 進ビットが異なる場合、結果は 1 になります。 (A ^ B) 結果は 49 で、二進数では 0011 0001 になります
<< 左シフト演算子「<<」は二項演算子です。 n ビットを左にシフトすると、2 の n 乗倍になります。 その機能は、「<<」の左側にあるオペランドのすべてのバイナリビットを特定のビット数だけ左にシフトすることです。「<<」の右側の数字は、そのビット数を指定します。シフトされたビットは破棄され、下位ビットは 0 で埋められます。 A << 2 結果は 240 で、2 進数では 1111 0000 になります
>>=右シフトと代入C >>= 2 は C = C > に等しい> 2& =ビット単位のAND、そして代入C &= 2はC = C & 2^=ビット単位のXORに等しい、そして代入C ^= 2はC = C ^ 2 |=ビットごとの ORC |= 2 は C = C | 2
演算子説明
=単純な代入演算子、式の値を左辺値に代入しますC = A + B will A + B 式 結果は C に代入されます
+=を加算して割り当てC += AはC = C + Aに等しい
-=を減算して割り当てC -= AはC = Cに等しい- A
*=乗算してCを代入 *= AはCに等しい = C * A
/=除算してCを代入 /= AはCに等しい= C / A
%=余りを見つけて値を代入しますC %= A は C = C % A
<<=左にシフトして代入します値C <<= 2 は C = C <2 に等しい
に等しい 次の例は、代入演算子の使用法を示しています。
第一行 - c 的值为 12
第二行 - c 的值为 61
第三行 - c 的值为 49
第四行 - c 的值为 240
第五行 - c 的值为 15

上記の実行結果例:

package main

import "fmt"

func main() {
   var a int = 21
   var c int

   c =  a
   fmt.Printf("第 1 行 - =  运算符实例,c 值为 = %d\n", c )

   c +=  a
   fmt.Printf("第 2 行 - += 运算符实例,c 值为 = %d\n", c )

   c -=  a
   fmt.Printf("第 3 行 - -= 运算符实例,c 值为 = %d\n", c )

   c *=  a
   fmt.Printf("第 4 行 - *= 运算符实例,c 值为 = %d\n", c )

   c /=  a
   fmt.Printf("第 5 行 - /= 运算符实例,c 值为 = %d\n", c )

   c  = 200; 

   c <<=  2
   fmt.Printf("第 6行  - <<= 运算符实例,c 值为 = %d\n", c )

   c >>=  2
   fmt.Printf("第 7 行 - >>= 运算符实例,c 值为 = %d\n", c )

   c &=  2
   fmt.Printf("第 8 行 - &= 运算符实例,c 值为 = %d\n", c )

   c ^=  2
   fmt.Printf("第 9 行 - ^= 运算符实例,c 值为 = %d\n", c )

   c |=  2
   fmt.Printf("第 10 行 - |= 运算符实例,c 值为 = %d\n", c )

}

その他の演算子 演算子

次の表は、Go 言語のその他の演算子のリストです。

Operator&*次の例は、他の演算子の使用法を示しています:
DescriptionInstance
Return 変数ストレージアドレス &a; は変数の実際のアドレスを返します。
ポインタ変数。 *a; はポインター変数です
第 1 行 - =  运算符实例,c 值为 = 21
第 2 行 - += 运算符实例,c 值为 = 42
第 3 行 - -= 运算符实例,c 值为 = 21
第 4 行 - *= 运算符实例,c 值为 = 441
第 5 行 - /= 运算符实例,c 值为 = 21
第 6行  - <<= 运算符实例,c 值为 = 800
第 7 行 - >>= 运算符实例,c 值为 = 200
第 8 行 - &= 运算符实例,c 值为 = 0
第 9 行 - ^= 运算符实例,c 值为 = 2
第 10 行 - |= 运算符实例,c 值为 = 2

上記の実行結果:

package main

import "fmt"

func main() {
   var a int = 4
   var b int32
   var c float32
   var ptr *int

   /* 运算符实例 */
   fmt.Printf("第 1 行 - a 变量类型为 = %T\n", a );
   fmt.Printf("第 2 行 - b 变量类型为 = %T\n", b );
   fmt.Printf("第 3 行 - c 变量类型为 = %T\n", c );

   /*  & 和 * 运算符实例 */
   ptr = &a	/* 'ptr' 包含了 'a' 变量的地址 */
   fmt.Printf("a 的值为  %d\n", a);
   fmt.Printf("*ptr 为 %d\n", *ptr);
}

演算子の優先順位

一部の演算子は、演算の優先順位が高くなります。二項演算子の方向は左から右です。次の表は、すべての演算子とその優先順位を上から下に示しています。 GT ; & &^

5+ - | ^3 2&&1|| もちろん、括弧を使用すると、式の全体的な操作の優先順位を一時的に高めることができます。
第 1 行 - a 变量类型为 = int
第 2 行 - b 变量类型为 = int32
第 3 行 - c 变量类型为 = float32
a 的值为  4
*ptr 为 4
package main

import "fmt"

func main() {
   var a int = 20
   var b int = 10
   var c int = 15
   var d int = 5
   var e int;

   e = (a + b) * c / d;      // ( 30 * 15 ) / 5
   fmt.Printf("(a + b) * c / d 的值为 : %d\n",  e );

   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   fmt.Printf("((a + b) * c) / d 的值为  : %d\n" ,  e );

   e = (a + b) * (c / d);   // (30) * (15/5)
   fmt.Printf("(a + b) * (c / d) 的值为  : %d\n",  e );

   e = a + (b * c) / d;     //  20 + (150/5)
   fmt.Printf("a + (b * c) / d 的值为  : %d\n" ,  e );  
}
== != <= >= >
上記インスタンスの実行結果: 上記インスタンスの実行結果: