Go語言位運算符
位運算符適用於位並進行逐位操作。 如下 &, |, ^ 的真值表
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 |
假設,如果A =60;且b =13;現在以二進製格式它們如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
C語言支持位運算符列在如下表。假設變量A=60和變量B=13,則:
運算 | 描述 | 示例 |
---|---|---|
& | 二進製與操作副本位的結果,如果它存在於兩個操作數 | (A & B) = 12, 也就是 0000 1100 |
| | 二進製或操作副本,如果它存在一個操作數 | (A | B) = 61, 也就是 0011 1101 |
^ | 二進製異或操作副本,如果它被設置在一個操作數但不能同時是比特 | (A ^ B) = 49, 也就是 0011 0001 |
<< | 二進製左移位運算符。左邊的操作數的值向左移動由右操作數指定的位數 | A << 2 will give 240 也就是 1111 0000 |
>> | 二進製向右移位運算符。左邊的操作數的值由右操作數指定的位數向右移動 | A >> 2 = 15 也就是 0000 1111 |
例子
試試下麵的例子就明白了所有的Go編程語言提供了位運算符:
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("Line 1 - Value of c is %d\n", c ) c = a | b /* 61 = 0011 1101 */ fmt.Printf("Line 2 - Value of c is %d\n", c ) c = a ^ b /* 49 = 0011 0001 */ fmt.Printf("Line 3 - Value of c is %d\n", c ) c = a << 2 /* 240 = 1111 0000 */ fmt.Printf("Line 4 - Value of c is %d\n", c ) c = a >> 2 /* 15 = 0000 1111 */ fmt.Printf("Line 5 - Value of c is %d\n", c ) }
當你編譯和執行上麵的程序就產生以下結果:
Line 1 - Value of c is 12 Line 2 - Value of c is 61 Line 3 - Value of c is 49 Line 4 - Value of c is 240 Line 5 - Value of c is 15