Ja定义的按位运算符直接对整数类型的位进行运算,包括long、int、short、char和byte。
位运算符主要用于对操作数的二进制位进行运算。按位运算是指计算每一位,其操作数和运算结果都是整数值。
Ja语言中的位操作符分为位逻辑操作符和位移操作符,下面详细介绍每一类包含的操作符。
位逻辑运算符
有四种按位逻辑运算符:&(与)、|(或)、~(非)和(异或)。除了~(也就是反演)是单目算子,其他都是双目算子。表1列出了它们的基本用法。
表1位逻辑运算符
运算符
意义
例子
结果
&
按位“与”运算
4 & 5
四
|
按位“或”运算
4 | 5
五
^
逐位异或运算
4 ^ 5
一个
~
逐位求反运算(非)
~ 4
-5
位和运算符
位与运算符是&它的运算规则是:参与运算的数字低位对齐,高位用零填充。如果对应的二进制位同时为1,则计算结果为1,否则为0。因此,任何数字与0之间的按位AND运算都将得到0。
例如,下面的表达式:
100&0
图1显示了这个操作过程,结果是0。
图1 100位和0的运算过程
下面是两个非零数按位AND运算的过程。
这两行语句执行后,变量z的值为4,操作过程如图2所示。
图2 5位和12位的操作过程
位或运算符
按位OR运算符为|,其运算规则为:运算涉及的位数,低位对齐,高位不足则补零。如果只有一个相应的二进制位是1,则结果是1;如果相应的二进制位都是0,则结果为0。
下面是一个使用按位or运算符的表达式。
11|7
运算结果为15,运算过程如图3所示。
图3 11位或7位的操作过程
按位异或运算符
按位异或运算符为0,其运算规则为:参与运算的位数以低位对齐,高位不足的位数以零填充。如果对应的二进制位相同(均为0和1),则结果为0;如果相应的二进制位不同,则结果为1。
以下是使用按位XOR运算符的表达式。
11^7
运算结果为12,运算过程如图4所示。
图4 11位异或7的运算过程
提示:在一些高级语言中,运算符“0”被用作取幂运算符,所以要注意区分。
比特倒置算子
按位求反运算符是~,它的运算规则是:只运算一个操作数,操作数二进制中的1变0,0变1。
以下是使用按位求反运算符的表达式。
~10
操作结果是65525,操作过程如图5所示。
图5 10位反转的操作过程
我们可以使用下面的过程来检查这个操作的结果。
编译并执行上面的程序,你会发现输出结果是-11,而不是65525。这是因为求逆后的结果是十六进制数,而在上面的程序中,用%d将输出转换成十进制数。
您可以使用以下语句查看十六进制结果。
可以看到输出结果是fff5,转换成二进制是111111111110101。这个二进制数的最高位是1,表示这个数是负数。除了最高有效位,通过位反转加1得到二进制源代码100000000001011,用十进制数表示就是-11。
注意:位运算符的操作数只能是整数或字符数据及其变体,不用于float、double或long等复杂数据类型。
位移算子
移位运算符用于将操作数向某个方向(向左或向右)移动指定数量的二进制数字。表2列出了Ja语言中的两个位移运算符,都属于双目运算符。
表2位移算子
运算符
意义
例子
结果
右移位运算符
8 1
四
左移运算符
9 2
36
左移运算符
左移运算符为,其运算规则为:将所有数以二进制形式左移相应位数,高位移出(丢弃),低位的空位用零填充。
例如,将整数11左移一位的过程如图6所示。
图6将11左移1位的操作过程
从图6中可以看出,原始数字的所有二进制位都左移一位。最初位于左侧的最高位0被移除并丢弃,然后在尾部添加0补码。最终结果是22,是原来的两倍。
右移位运算符
右移运算符为,其运算规则为:将所有数以二进制形式右移相应位数,低位移出(丢弃),高位的空位用零填充。
例如,将整数11向右移动一位的过程如图7所示。
图7 11右移1位的操作过程
从图7中可以看出,原始数字的所有二进制位都向右移动了一位。最初位于右侧的最低位1被移除并丢弃,然后向最高位添加补码0。最后的结果是5,相当于原来的数除以2的结果。
复合位赋值运算符
所有二进制位操作符都有一个缩写形式,它将赋值和位操作结合在一起。复合位赋值算子由赋值算子、位逻辑算子和位移算子组成。表3列出了组合的复合位赋值运算符。
表3复合位赋值运算符
运算符
意义
例子
结果
&=
按位and赋值
数字1 &=数字2
相当于数量1 =数量1 &数量2
|=
按位or赋值
数量1 |=数量2
相当于num 1=num 1 | num2。
=
按位异或赋值
^=数字1
相当于num 1 = num 1 num 2。
-=
按位求反赋值
数量1 -=数量2
相当于数字1 =数字1-数字2
=
按位左移赋值
数字1 =数字2
相当于num 1 = num 1 num 2。
=
按位右移赋值
数字1 =数字2
相当于num 1 = num 1 num 2。
下面的程序定义了几个int变量,然后以位赋值速记的形式将计算出的值赋给相应的变量:
这个程序的输出是:
a = 1
b = 1
c = 6
想要源代码的同学可以在评论区扣除“234”免费获得。
\”链接\”
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。