购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

6.4 位运算符

位运算是以二进位(bit)为单位进行运算的,操作数和结果都是整型数据。位运算符包括&、|、^、~、>>、<<和>>>,以及相应的赋值运算符,具体说明如表6-6所示。

表6-6 位运算符

注意 无符号右移>>>运算符仅被允许用在int和long整数类型,如果用于short或byte数据,则数据在位移之前转换为int类型后再进行位移计算。

位运算示例代码如下:

输出结果如下:

上述代码第①行和第②行分别定义了byte变量a和b,为了便于查看代码采用二进制整数表示。

代码第③行中表达式(a|b)进行位或运算,结果是二进制的0B01111110。a和b按位进行或计算,只要有一个为1,这一位就为1,否则为0。

代码第④行(a&b)是进行位与运算,结果是二进制的0B00010010。a和b按位进行与计算,只有两位全部为1,这一位才为1,否则为0。

代码第⑤行(a ^ b)是进行位异或运算,结果是二进制的0B01101100。a和b按位进行异或计算,只有两位相反时这一位才为1,否则为0。

代码第⑦行(a>>2)是进行有符号右位移2位运算,结果是二进制的0B00001100。a的低位被移除掉,由于正数符号位是0,高位空位用0补。类似代码第⑧行(a>>1)是进行右位移1位运算,结果是二进制的0B00011001。

代码第⑨行(a>>>2)是进行无符号右位移2位运算,与代码第⑦行不同的是,无论是否有符号位,高位空位用0补,所以在正数情况下>>和>>>运算结果是一样的。

代码第⑩行(a<<2)是进行左位移2位运算,结果是二进制的0B11001000。a的高位被移除掉,低位用0补位。类似代码第⑪行(a<<1)是进行左位移1位运算,结果是二进制的0B01100100。

代码第⑫行声明int类型负数。右位移(>>>和>>)在负数情况下差别比较大。代码第⑬行的(c>>>2)表达式输出结果是1073741821,这是一个如此大的正数,从一个负数变成一个正数,这说明无符号右位移对于负数计算会导致精度的丢失。而有符号右位移对于负数的计算是正确的,见代码第⑭行。

提示 有符号右移 n 位,相当于操作数除以2 n ,例如代码第⑦行(a>>2)表达式相当于(a/2 2 ),a=50,所以结果等于12,类似的还有代码第⑧行和第⑭行。另外,左位移 n 位,相当于操作数乘以2 n ,例如代码第⑩行(a<<2)表达式相当于(a∗2 2 ),a=50,所以结果等于200,类似的还有代码第⑪行。 YD/V3kta+f+7b3mlYbeZ7X8TZ7zvZqfqszevq3K3R178YXYQ/3DQ982xBSrYOzXl

点击中间区域
呼出菜单
上一章
目录
下一章
×