位运算
按位与(&) 都1则1
- 对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1
按位或(|) 有1则1
- 比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)
按位异或(^) 不同为1 相同为0 两数异或 可看作是两数没有进位的加法
- 比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0
- 异或运算最重要的性质,就是 0 和任何一个数字(y)异或的结果,都是这个数字本身。即:0 ^ y = y
- 异或满足交换律 x ^ y = y ^ x
- 两个相同的数字做异或, 结果为 0
- 取最低位的1 n & -n
- 将最低位的1移除 n & (n-1)
- 按位取反(~)
- 对一个操作数的每一位都取反
- 按位左移(<<)
- 将操作数的所有位向左移动指定的位数。
- 按位右移(>>)
- 将操作数的所有位向又移动指定的位数。
原码反码补码
原码转换为反码:符号位不变,数值位分别“按位取反”
反码转换为原码也是一样:符号位不变,数值位分别“按位取反”
原码转换为补码:符号位不变,数值位按位取反,末位再加1
补码转换为原码:符号位不变,数值位按位取反,末位再加1。
即补码的补码等于原码
求补(变补),即已知[X]补,求[-X]补 。
符号位和数值位都取反,末位再加1
负数部分:
原码和反码的相互转换:符号位不变,数值位按位取反
原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1
已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1