Java位操作符

java位操作符前言

我们知道计算机底层是二进制也就是0和1,00100101转为10进制的计算方式 1+0*2^1+1*2^2+0*2^3+0*2^4+1*2^5+0*2^6=37

1个字节=8位元组(bit),最高位是符号位,0代表正1代表负。

1.理论定义

(1)二进制的最高位是符号位,0表示正数,1表示负数;

(2)正数的原码、反码、补码都一样

(3)负数的反码=它的原码符号位不变,其它位取反(0->1   0->0);

(4)负数的补码=它的反码+1;反码=补码-1;

(5)0的反码补码都是0;

(6)java没有无符号数,java中数都是有符号的;

(7)在计算机运算的时候,都是以补码的方式来运算的,所以负数计算按位或,按位与,按位异或等都要先把十进制的负数取得补码以后再进行运算,同样,结果是负数元组(1********)的时候也要转成反码,再转成原码。

2.位运算符和移位运算符:

Java中有4个位运算,分别是“按位与&、按位或|、按位异或^、按位取反~”,它们运算规则:

按位与&:两位全为1,结果为1;

按位或|:两位有一个为1,结果为1;

按位异或^:只有当相应位上的数字不相同时,该位才取1,若相同,即为0;

按位取反~:0->1、 1->0

3.Java中有三个移位运算符:

>>算术右移:低位溢出,符号位不变,并用符号位补溢出的高位

<<算术左移:符号位不变,低位补0

>>>逻辑右移:低位溢出,高位补0

实例:

示例1:~2:
原数按位取反得到负数元组(补码),所以要转成反码,然后转成原码
原数:00000010
取反:11111101  这个结果是补码
反码:11111100
结果:10000011  结果-3

示例2:2&3
00000010
00000011
结果:00000010  结果:2

示例3:2|3
00000010
00000011
结果:00000011 结果3

示例4:~-5
因为计算机计算都按补码计算,所以先获取-5的补码,然后包括符号位在内全部0变1,1变0,获取结果
原码:100000101
反码:111111010
补码:111111011
结果:000000100 结果:4

示例5:-3^3
-3原码:100000011
      反码:111111100
      补码:111111101
00000011
      结果:11111110(这是补码)
      补码:11111110加上-1的补码111111111结果是1111111101取反100000010 结果-2

你可能感兴趣的:(Java)