位bit、字节byte
位 bit:也叫比特,二进制数中的一个数位,是计算机中数据的最小单位。
字节 byte:每8位组成一个字节,计算机中数据的基本单位。
java中的int类型由4个字节组成,即32位。
基本类型所占字节:
short:2byte
int:4byte
long:8byte
float:4byte
double:8byte
boolean:1byte
char:2byte
原码、反码、补码
- 二进制的最高位是符号位:0表示正数,1标识负数。
- 正数的原码、反码、补码都一样。
- 负数的反码 = 它的原码符号位不变,其它位取反。
- 负数的补码 = 他的反码 +1。
- 0的反码、补码都是0。
- java中的数都是有符号的。
- 在计算机运算的时候,都是以补码的方式来运算的。
- 我们看运算结果要看原码。
位运算
java中有7个位运算&、|、^、~、>>、<<、>>>
&
按位与:两位全为1,结果为1,否则为0
|
按位或:两位有一个为1,结果为1,否则为0
^
按位异或:两位一个为0一个为1,结果为1,否则为0
~
按位取反:0变成1,1变成0
<<
算数左移:符号位不变,低位补0。
>>
算数右移:底位溢出,符号位不变,并用符号位补溢出的高位。
>>>
逻辑右移也叫无符号右移:低位溢出,高位补0。
示例
-
2&3
2 的原码 00000000 00000000 00000000 00000010
3 的原码 00000000 00000000 00000000 00000011
2 的补码 00000000 00000000 00000000 00000010
3 的补码 00000000 00000000 00000000 00000011
运算结果 00000000 00000000 00000000 00000010
结果的原码 00000000 00000000 00000000 00000010
十进制结果 2 -
~-2
-2 的原码 10000000 00000000 00000000 00000010
-2 的反码 11111111 11111111 11111111 11111101
-2 的补码 11111111 11111111 11111111 11111110
运算结果 00000000 00000000 00000000 00000001
结果的原码 00000000 00000000 00000000 00000001
十进制结果 1 -
~2
2 的原码 00000000 00000000 00000000 00000010
2 的补码 00000000 00000000 00000000 00000010
运算结果 11111111 11111111 11111111 11111101
结果的反码 11111111 11111111 11111111 11111100
结果的原码 10000000 00000000 00000000 00000011
十进制结果 -3 -
6<<2
6 的补码 00000000 00000000 00000000 00000110
运算结果 00000000 00000000 00000000 00011000
十进制结果 24 -
6>>2
6 的补码 00000000 00000000 00000000 00000110
运算结果 00000000 00000000 00000000 00000001
十进制结果 1
正数的左移n位相当于 * (2n) ,右移n位相当于 / (2n)
-6>>2
-6 的原码 10000000 00000000 00000000 00000110
-6 的反码 11111111 11111111 11111111 11111001
-6 的补码 11111111 11111111 11111111 11111010
运算结果 11111111 11111111 11111111 11111110
结果的反码 11111111 11111111 11111111 11111101
结果的原码 10000000 00000000 00000000 00000010
十进制结果 -2
参考链接:
java存储单位 字节与位
java位运算符