专注于高等教育
科普综合平台
按位与(&)
定义:对参与运算的两个数据的二进制位进行"与"运算。
运算规则:只有两位都为1时,结果才为1,否则结果为0。
可视化过程:只有当两个位都是1时,结果位才为1。
示例:
```
1100 (a)
& 0110 (b)
------
0100 (4)
```
按位或(|)
定义:对参与运算的两个对象的二进制位进行"或"运算。
运算规则:只要有一个为1,其值为1。
可视化过程:只要有一个位是1,结果位就为1。
示例:
```
1100 (a)
| 0110 (b)
------
1110 (14)
```
按位异或(^)
定义:对参与运算的两个对象的二进制位进行"异或"运算。
运算规则:两个位相同为0,相异为1。
可视化过程:对应位不相同时结果为1。
示例:
```
1100 (a)
^ 0110 (b)
------
1010 (10)
```
按位取反(~)
定义:将操作数的每一位取反,0变1,1变0。
示例:
```
n (12): 0000 0000 0000 0000 0000 0000 0000 1100
~n: 1111 1111 1111 1111 1111 1111 1111 0011(补码)
--> 1000 0000 0000 0000 0000 0000 0000 1100(取反,符号位不变)(反码)
--> 1000 0000 0000 0000 0000 0000 0000 1101(原码)(-13, 假设int是32位)
```
左移(<<)
定义:将操作数的所有位向左移动指定位数,空出的位用0填充。
示例:
```
n (12): 1100
n << 2: 110000 (48)
```
右移(>>)
定义:将操作数的所有位向右移动指定位数。有两种右移:
算术右移:空出的位用符号位填充。
逻辑右移:空出的位总是用0填充。
示例:
```
n (12): 1100
n >> 2: 0011 (6)
```
通过以上步骤,你可以清晰地看到每种位运算的运算过程和结果。这对于理解和掌握位运算非常有帮助。