ja移位运算符 JA运算符类型

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”免费获得。

\”链接\”

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论