golang演算子https://studygolang.com/articles/12463

導入:演算子の優先順位は、それは計算の計算式で実行される一連の動作を説明します。次に、優先度の高い優先度の低い業務の実行を最初の操作を行います。

 

まず、算術演算子

次の表は、すべての算術演算子には、言語を移動します。Aが10であると仮定すると、Bは20です。

演算子                      説明                          例                                                         
+ 追加 + B出力30
- 引き算 - B出力-10
* 掛け * B出力200
/ 分割します B /出力2
余り Bの%A 0出力
++ インクリメント 出力11 A ++
- デクリメント A--出力9

第二に、関係演算子

次の表は、関係演算子がすべての言語に行く示しています。Aが10であると仮定すると、Bは20です。

演算子 説明
== 二つの値がそうでなければFalseの場合はTrue等しい、等しい戻っているか確認してください。 (== b)はFalseに
!= それ以外の場合はfalseの場合は二つの値がTrue等しい、等しくない戻っていないか確認してください。 (A!= B)はTrueです
> 左の値を確認することは、そうでなければFalseであれば、それはTrueを返し、右の値よりも大きいです。 (A> B)はFalseで
< それ以外の場合はFALSEであれば左の値が右の値よりも小さいチェックし、それはTrueを返します。 (A <B)为真
> = それ以外の場合はFALSEであれば左の値が右の値以上で確認し、それはTrueを返します。 Falseに(A> = B)
<= それ以外の場合はFALSEであれば左の値が右の値以下で確認してください、それはTrueを返します。 (A <= B)为真

第三に、論理演算子

次の表は、移動中のすべての論理演算子を示しています。Aが真であると仮定すると、BはFalseです。

演算子 説明
&& 論理AND演算子。オペランドの両側が真である場合、条件はtrue、そうでない場合はfalseです。 (&& B)为偽
|| 論理OR演算子。真の両側に操作の数ならば、条件はtrue、そうでない場合はfalseです。 (|| B)は真であります
NOT論理演算子。条件がTrueの場合は、論理NOT条件は、そうでない場合はTrue、Falseです。 !(&& B)为真

第四に、ビット演算子

メモリ動作の整数ビットのビット演算子。B 13、A 60であると仮定する

演算子 説明
ビットAND演算子「&」の二項演算子です。その機能は、それぞれに対応する2つの2進数の位相を計算に関与しています。 12の結果として(A&B)は、バイナリ0000 1100です
| ビットごとのOR演算子は「|」二項演算子です。その機能は、2つの2進数の各対応する位相を計算に関与している、または (A | B)の結果は、61であるバイナリ00111101であります
^ ビット単位の排他的論理和演算子「^」二項演算子です。その機能は、2つの異なる対応するバイナリは、結果が1である場合、バイナリ又は異なる対応する二つのそれぞれの数を、計算に関与しています。 (A ^ B)結果は49であり、バイナリ00110001であります
<< 左シフト演算子「<<」二項演算子です。Nビット左シフトが2 ^ nで乗算されます。そのバイナリのオペランドのそれぞれの機能は、「<<」のすべての左にビット数を残し、「<<」移動のビット数は、上部、下部0を捨て、権利を指定します。 11110000へ<< 2結果240バイナリー
>> 右シフト演算子「>>」二項演算子です。右nビットは、2 ^ nで分割されています。その機能は、すべての様々なバイナリのオペランドは「>>」、左から右へ、「>>」いくつかの権利によって指定されたビット数で置くことです。 A >> 2結果15 1111 0000バイナリ

デモ:

package main

import "fmt"

func main() {
   var a int = 60     //二进制是:111100  
   var b int = 13     //二进制是:001101

   fmt.Printf("%b\n%d\n",a&b,a&b)    //二进制是:1100,对应的十进制是12。说明&进行的是上下对应位的与操作
   fmt.Printf("%b\n%d\n",a|b,a|b)    //二进制是:111101,对应的十进制是61。说明&进行的是上下对应位的或操作
   fmt.Printf("%b\n%d\n",a^b,a^b)    //二进制是:110001,对应的十进制是49。^位运算符是上下对应位不同时,值为1
}

演算子の例は、(計算機記憶ユニットを達成するために)右から左:

package main

import "fmt"

const (   
    KB float64 = 1<<(10*iota)      //iota是 const 结构里面,定义常量行数的索引器,每个 const 里面,iota 都从 0 开始
    MB                             //下面是一个省略调用,继承了上面的表达式
    GB
    TB
    PB
)

func main() {
   fmt.Printf("1MB = %vKB\n",MB) 
   fmt.Printf("1GB = %vKB\n",GB)
   fmt.Printf("1TB = %vKB\n",TB)
   fmt.Printf("1PB = %vKB\n",PB)
}
运行结果:
1MB = 1024KB
1GB = 1.048576e+06KB
1TB = 1.073741824e+09KB
1PB = 1.099511627776e+12KB

第五に、代入演算子

次の表は、代入演算子は、すべての言語を行く示しています。A 21が想定されます

演算子  説明                                                                 例                                                 
= 単純代入演算子、左に割り当てられた値の式の値 21:C = Aは、Cに結果を割り当てられます
+ = 割り当て前に一緒に追加されました 42:C + = A結果、C = C + Aに等しいです。
- = 減算割り当てた後、 C - = Aは、C = Cに等しい - A、結果:21
* = 割り当てを乗じて 441:Cは、* = A結果、C = C * Aに等しいです。
/ = 譲渡後の課 21:C / = AはC = C / A、結果に等しいです。
%= 譲渡後の剰余 0計算に記録されていない//値:C%= Aは、結果C = C%でのAに等しいです。
<< = 割り当て後に残りました C << = 2 C = C << 2、に等しい結果:84
>> = 割り当て後に右 C C = C >> 2、結果に等しい>> = 2:21
&= ビット演算と代入した後 C&C = C&2に等しい= 2、の結果:0
^ = ビットXOR割り当てを押した後 C C = C ^ 2、結果に等しい^ = 2:2
| = 位置または割り当てを押した後 C | = C = Cに等しい2 | 2結果:2

他の6つの事業者

演算子  説明                                                                例                                                            
変数のメモリアドレスを返します。 &Aは、変数の実際のアドレスについて説明します。
* ポインタ変数。 * Aは、ポインタ変数であります

サンプルメモリとアドレスポインタ:印刷可変型と%のT

package main

import "fmt"

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

   fmt.Printf("a 变量类型为 = %T\n", a )     //输出变量类型%T
   fmt.Printf("b 变量类型为 = %T\n", b )
   fmt.Printf("c 变量类型为 = %T\n", c )

   ptr = &a    
   fmt.Printf("a 的内存地址为 = %p",ptr)     //go里面的内存块地址通常都是用十六进制表示的,因此输出:0x10414020a
   fmt.Printf("*ptr 为 %d\n", *ptr)        //这是个指向a的内存地址的指针,因此输出:4
}

七、演算子の優先順位

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

优先级     运算符
 7      ^ !
 6      * / % << >> & &^
 5      + - | ^
 4      == != < <= >= >
 3      <-
 2      &&
 1      ||

当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。

参考:http://www.runoob.com/go/go-operators.html 

おすすめ

転載: blog.csdn.net/u013755520/article/details/92078559