一卓的博客

怕什么真理无穷,
进一寸有一寸的欢喜。

0%

原码反码补码与位运算

位运算

  • 按位与(&) 都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

请作者喝杯咖啡吧