位运算基础

我们知道计算机底层是二进制也就是0和1,00100101转为10进制的计算方式 1+021+1*22+023+0*24+1*25+0*26=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

原文地址:https://www.cnblogs.com/AmosAlbert/p/12832310.html