位运算符主要是以二进制规则进行运算
位运算符有七个,分为两类:
逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)
移位运算符:左移(<<)、右移(>>)、无符号右移(>>>)
位逻辑运算符
1.按位与
一个&时,参加运算的两个数据,按二进制位进行“与”运算。运算规则:同1为1,其余为0。
两个&时,表示逻辑与的意思,即为and。当运算符两边的表达式的结果都为真时,整个运算结果才为1,只要有一方为假,则结果为0。
用途1:将某一位置为0,其它位不变
举例:将char 型变量a的最低位置0:
a = a & 0376
其中:0376:11111110
用途2:取指定位
举例:取出a的低字节,置于c中
c = a & 0377
其中:0376:11111111
2.按位或
一个 | 时,参加运算的两个对象,按二进制位进行“或”运算。运算规则:同0为0,有1为1。另外,负数按补码形式参加按位或运算。
两个 | 时,是“逻辑或”,当两个条件中有任一个条件满足,“逻辑或”的运算结果就为“真”即1。
用途:将某些位置为1,其它位不变
举例:将int型 变量a 的低字节置为1:
a = a | 0xff
其中:
0xff:11111111
3.按位异或
参与运算的两个数据,按二进制位进行“异或”运算。运算规则:相同为0,不同为1。
用途:使特定位翻转(与0异或保持原值,与1异或取反)
举例:使01111010 低四位翻转:
01111010 ^ 00001111 = 01110101
3.按位取反
按位取反操作会翻转其每一位。运算规则:0变为1,1变为0。
位移运算符
1.左移(<<):
符号左边是要进行左移运算的数,右边表示要移动的位数。运算规则:高位丢弃,低位补0。
通常:数a 左移n 位,即:a* 2^n
示例讲解
【注意】:左移后,最左侧一位为1时,代表是负数,(最左侧一位为符号位)
2.右移(>>):
符号左边是要进行右移运算的数,右边表示要移动的位数。运算规则:正数左补0,负数左补1。
通常:数a 右移n 位,即:a/2^n
示例讲解
示例讲解,正数奇数a右移n位,(a-1)/2^n; 正数偶数a 右移n位,a/2^n
示例讲解:负数右移,最左侧补1代表右移后还是负数。
3.无符号右移(>>>) :
即右移之后,无论该数为正还是为负,右移之后左补0。
总结
本篇文章讲解了位移运算符和位逻辑运算符。
- 位逻辑运算符比较好理解,而且代码中见到的也很多,但是对其用途需要更多的使用才能熟练使用。
- 位移运算符需要注意正负数,清楚什么时候补 0 什么时候补 1。