位-字节-bit-byte的关系
bit—位 byte—字节
1 byte = 8 bit
1KB = 1024 byte
1MB = 1024 KB
源码、反码、补码
原码:
就是原码,bai真实的码
反码:
在原码的基础上,符号位不变,数值位按位取反
补码:
(1)正数的补码:与原码相同。
【例1】+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反然后整个数加1。
位运算符
正数:第32位=0
负数:第32位=1
位运算符:与 &
1&1 = 1
1&0 = 0
0&0 = 0
System.out.println("4 的二进制位数:"+Integer.toBinaryString(4));
System.out.println("6 的二进制位数:"+Integer.toBinaryString(6));
System.out.println("4&6 的二进制位数:"+Integer.toBinaryString(4&6));
位运算符:或 |
1|1 = 1
1|0 = 1
0|0 = 0
System.out.println("4 的二进制位数:"+Integer.toBinaryString(4));
System.out.println("6 的二进制位数:"+Integer.toBinaryString(6));
System.out.println("4|6 的二进制位数:"+Integer.toBinaryString(4|6));
位运算符:非 ~
~1 = 0
~0 = 1
System.out.println("4 的二进制位数:"+Integer.toBinaryString(4));
System.out.println("~4 的二进制位数:"+Integer.toBinaryString(~4));
System.out.println("5 的二进制位数:"+Integer.toBinaryString(5));
System.out.println("~5 的二进制位数:"+Integer.toBinaryString(~5));
位运算符:异或 ^
1^1 = 0
1^0 = 1
0^0 = 0
System.out.println("4 的二进制位数:"+Integer.toBinaryString(4));
System.out.println("5 的二进制位数:"+Integer.toBinaryString(5));
System.out.println("6 的二进制位数:"+Integer.toBinaryString(6));
System.out.println("4^5 的二进制位数:"+Integer.toBinaryString(4^5));
System.out.println("4^6 的二进制位数:"+Integer.toBinaryString(4^6));
有符号左移 <<
将数字左移,符号位不变,原30位的值消失
System.out.println(Integer.toBinaryString(18));
System.out.println(Integer.toBinaryString(18<<1));
System.out.println(Integer.toBinaryString(-18));
System.out.println(Integer.toBinaryString(-18<<1));
有符号右移 >>
将数字右移,正数,高位补0;负数,高位补1;
System.out.println(Integer.toBinaryString(18));
System.out.println(Integer.toBinaryString(18>>1));
System.out.println(Integer.toBinaryString(-18));
System.out.println(Integer.toBinaryString(-18>>1));
无符号右移 >>>
将数字右移,高位统统补0
System.out.println(Integer.toBinaryString(18));
System.out.println(Integer.toBinaryString(18>>>1));
System.out.println(Integer.toBinaryString(-18));
System.out.println(Integer.toBinaryString(-18>>>1));