java中的位运算符:
带符号右移位运算符:>>
举例:capacity >> n 表示capacity除以2的n次方。
说明:若值为正,则在高位补0;若值为负,则在高位补1。
无符号右移位运算符:>>>
举例:capacity >>> n 表示capacity除以2的n次方。
说明:无论值为正负,都在高位补0。
带符号左移位运算符:<<
举例:capacity << n 表示capacity乘以2的n次方。
说明:无论值为正负,丢弃最高位,在最低位补0。
按位与运算符: &
说明:若对应位都为1,则该位的结果为1,否则该位的结果为0。
按位或运算符: |
说明:若对应位都为0,则该位的结果为0,否则该位的结果为1。
按位异或运算符:^
说明:若对应位的值相同(都为1或都为0),则该位的结果为0,否则该位的结果为1。
按位取反运算符:~
说明:若当前位的值为1,则该取反后该位的值为0;若当前位的值为0,则取反后该位的值为1。
举例:
a=60 二进制表示:a = 0011 1100
a=13 二进制表示:b = 0000 1101
-----------------
a & b = 0000 1100
a | b = 0011 1101
a ^ b = 0011 0001
~a = 1100 0011
重要:数值在计算机中是以补码的方式存储的!
概念:
原码:符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
反码:
正数的反码是其本身;
负数的反码是在其原码的基础上,符号位不变,其余位取反。
补码:
正数的补码就是其本身;
负数的补码是在反码的基础上+1。
十进制转换为二进制:
正数:直接转换即可。
负数:
1)先将负数的绝对值转换为二进制。
2)获取负数的绝对值的二进制的反码。
3)将反码加1。
eg:-5的二进制:
5的二进制: 0000 0101
5的二进制的反码: 1111 1010
反码加1得到-5的二进制: 1111 1011