位運算符
- 取反是一元運算符,對一個二進制數的每一位執行邏輯反操作。
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 )
}