二进制、八进制、十六进制间转换以及二进制的运算符和操作符总结(& | ^ ~ << >> >>> )
二进制
定义:有2 个基数:0 、1,逢二进一。
八进制
定义:有8个基数:0、1、2、3、4、5、6、7,逢八进一。
十进制
定义:有10个基数:0、1、2、3、4、5、6、7、8、 9 ,逢十进一。
十六进制
定义:有16个基数:0、1、2、3、4、5、6、7、8、9、A(10)、B(11)、C(12)、D(13)、E(14)、F(15),逢十六进一。
各种进制之间的转换
- 十进制转二进制示例图:
- 二进制转十进制示例图:
- 二进制转八进制示例图:
- 二进制转十六进制示例图:
- 八进制转二进制示例图:
- 十六进制转二进制示例图:
- 十进制转八进制和十六进制示例图:
- 八和十六进制转十进制示例图:
Java位运算符
- ”与“、”位与“(&)
定义:按位“与”操作符,如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0。
例子:9 & 8
9的二进制:0000 0000 0000 1001
8的二进制:0000 0000 0000 1000
结果是: 0000 0000 0000 1000 (8) - ”或“、“位或”(|)
定义:按位“异或”操作符,如果两个数的二进制,相同位数只要有一个是1,则该位结果是1,否则是0。
例子:9 | 8
9的二进制:0000 0000 0000 1001
8的二进制:0000 0000 0000 1000
结果是: 0000 0000 0000 1001 (9) - ”异或“、”位异或“ (^)
定义: 按位“异或”操作符,如果两个数的二进制,相同位数只有一个是1,则该位结果是1,否则是0。
例子:9 ^ 8
9的二进制:0000 0000 0000 1001
8的二进制:0000 0000 0000 1000
结果是: 0000 0000 0000 0001 (1) - ”非“、”位异非“(~)
定义:按位“非”操作符,属于一元操作符,只对一个操作数进行操作,(其他按位操作符是二元操作符)。按位“非”生成与输入位相反的值,——若输入0,则输出1,若输入1,则输出0。
例子:~9
9的二进制:0000 0000 0000 1001 补码
1111 1111 1111 1110 对9的二进制进行按位取反,不是求反码不要弄混淆
1000 0000 0000 1001 对取反后的值再取反,符号位不变
结果是: 1000 0000 0000 1010 对取反后的数据进行加“1”操作 (-10)
例子:~-9
-9的二进制:1000 0000 0000 1001 补码
1111 1111 1111 0110 对-9的二进制进行按位取反,同理不是求负数的反码
1111 1111 1111 0111 对取反后的二进制数据进行加“1”操作,符合位不变
结果是: 0000 0000 0000 1000 对加“1”后的数据进行取反 (8) - 原码、反码、补码
定义:正数的原码、反码、补码都一样,负数的反码是对除了符号位(最高位)对原码取反,补码是对反码+1,计算机计算是用的补码。补码求原码也可以按照上述逻辑取反+1操作。
举例:求-6的原码、反码、补码
-6的原码: 1000 0000 0000 0110
-6的反码: 1111 1111 1111 1001
-6的补码: 1111 1111 1111 1010 - 位移操作
(1)左移"<<"
定义:左移就是将左边的操作数在内存中的二进制数据左移右边操作数指定的位数,左边空的部分补0。
举例:6<<2
6的二进制是 0000 0000 0000 0110
左移两位 0000 0000 0001 1000 (24)
举例:-6<<2
-6的二进制是 1111 1111 1111 1010 补码
左移两位 1111 1111 1110 1000 左移
1111 1111 1110 0111 反码
1000 0000 0001 1000 原码 (-24)
快捷计算 补码取反+1操作为原码
(2)右移">>"
定义:右移则复杂些,如果是正数则在高位补0,负数则高位补1。
举例:6>>2
6的二进制是 0000 0000 0000 0110
右移两位 0000 0000 0000 0001 (1)
举例:-6>>2
-6的二进制是 1111 1111 1111 1010 补码
右移两位 1111 1111 1111 1110 右移
1111 1111 1111 1101 反码
1000 0000 0000 0010 原码 即-2
(3)无符号右移">>>"
定义:无符号右移,无论最高位是0还是1,左侧被移空的高位都填入0。
举例:6>>>2
6的二进制是 0000 0000 0000 0110
无符号右移两位 0000 0000 0000 0001 右移 即1
举例:-6>>>2
-6的二进制是 1111 1111 1111 1010 补码
无符号右移两位 0011 1111 1111 1110 右移动
0011 1111 1111 1101 反码
1100 0000 0000 0010 原码 即1073741822