golang中位運算符與移位


位運算符

  • 取反是一元運算符,對一個二進制數的每一位執行邏輯反操作。
NOT 0111(十進制7)
  = 1000(十進制8)

許多程序設計語言,取反操作符用波浪線”~“表示。

  • 按位或處理兩個長度相同的二進制數,兩個相應的二進位只要有一個為1,該位的結果值為1
    0101(十進制5)
 OR 0011(十進制3)
  = 0111(十進制7)

按位或操作符是"|"

  • 按位異或對等長二進制數的每一位執行邏輯異或操作。操作的結果是如果某位不同則該位為1,否則該位為0.
     0101
 XOR 0011
   = 0110

按位異或運算符是"^"

  • 按位與處理兩個長度相同的二進制數,兩個相應的二進位都為1,該位的結果值才為1, 否則為0
     0101
 AND 0011
   = 0001

按位與操作符是"&"

位運算符對整數在內存中的二進制位進行操作

p q p&q p|q p^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

移位

移位是一個二元運算符,用來將一個二進制數中的每一位全部都向一個方向移動指定位,溢出的部分將被舍棄,而空缺的部分填入一定的值。

   0001(十進制1)
<<    3(左移3位)
 = 1000(十進制8)

左移用"<<"表示

   1010(十進制10)
>>    2(右移2位)
 = 0010(十進制2)

右移用">>"表示

位運算符、移位在golang中應用

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 )
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM