位运算符

PS: 理解下文我所举的例子需要了解补码、原码与反码,如果不了解,可以先去看我的另一篇博文————数字类型在JVM(Java虚拟机)中的表示

&:按位与

当两个操作数皆为1时,值为1,否则值结果0

例:假使
byte x=8,y=10;
byte z=x&y;

分别计算出x与y的补码(正数的补码是该数的二进制表示)
x:0000 1000
y:0000 1010

操作数x00001000
操作数y00001010
值z00001000

0000 1000即为z的值,z=8

|:按位或

当两个操作数其中一个为时,值为一,都为0时则为0

例:假使
byte x=8,y=10;
z=x|y;

分别计算出x与y的补码(正数的补码是该数的二进制表示)
x:0000 1000
y:0000 1010

操作数x00001000
操作数y00001010
值z00001010

0000 1010即为z的值,z=10

~:按位非

当操作数为1时,值为0,操作数为0时,值为1

例:假使
byte x=8;
byte y=~x;

计算出x的补码(正数的补码是该数的二进制表示)
x:0000 1000

操作数x00001000
值y11110111

1111 0111即为y的值,y=-119

^:按位异或

当两个操作数有且仅有一个为1时,值为1,否则值皆为0

例:假使
byte x=8,y=10;
byte z=x^y;

分别计算出x与y的补码(正数的补码是该数的二进制表示)
x:0000 1000
y:0000 1010

操作数x00001000
操作数y00001010
值z00000010

0000 0010即为z的值,z=2

<<:左位移运算符

符号位不变,高位溢出,低位补0,

例:假使
byte x=8;
byte y=x<<2

计算出x的补码(正数的补码是该数的二进制表示)
x:0000 1000
左移:00 | 0010 00xx (最高位不变,二进制位向左移动了2位,高位溢出部分移除,低位补0) 0010 0000
0010 0000即为y的值,y=32

>>:右位移运算符

符号位不变,低位溢出,高位用符号位补

例:假使
byte x=-8;
byte y=x>>2

计算出x的补码(负数的补码是该数的反码+1)

原码1000 1000
反码1111 0111
补码1111 1000

右移:1111 1110 | 00 (符号位不变,二进制值向右移动两位,高位用符号位补,低位溢出的部分移除) 1111 1110,再根据新得到的补码计算出值

补码1111 1110
反码1111 1101
原码1000 0010

1000 0010即为y的值,y=-2

<<<:无符号右移运算符

符号位跟着移动,低位溢出,高位补0。

例:假使
byte x=-8;
byte y=x>>2

计算出x的补码(负数的补码是该数的反码+1)

原码1000 1000
反码1111 0111
补码1111 1000

右移:0011 1110 | 00 (符号位变,二进制值向右移动两位,高位用0补,低位溢出的部分移除) 0011 1110,再根据新得到的补码计算出值

补码0011 1110
反码0011 1101
原码0100 0010

0100 0010即为y的值,y=66

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值