位运算

1、计算机中数字的二进制

在计算机中,二进制正数和负数的表示方法不同。正数直接以其二进制形式表示,而负数则通过‌补码的形式表示。

具体转换步骤

  1. ‌原码‌:正数的原码与反码、补码相同,负数的原码是其绝对值的二进制表示,但最高位为1。例如,-5的原码为10000000 00000000 00000000 00000101。
  2. ‌反码‌:负数的反码是其原码除符号位外各位取反。例如,-5的反码为11111111 11111111 11111111 11111010。
  3. ‌补码‌:负数的补码是其反码加一。例如,-5的补码为11111111 11111111 11111111 11111011。
为什么负数在计算机取补码?
通过补码表示,计算机可以只使用加法电路来处理减法运算。
减法的本质是加上负数的补码,因此加法和减法操作可以用同一种逻辑实现,这简化了计算机的硬件设计,并提高了处理运算的效率。
例如:5的计算机表示(原码):00000101-3的计算机表示(补码): 11111101(原码:1000011,反码:1111100,+1=补码:11111101)
5-3=5+(-3)=
0000 0101
+
1111 1101
=
10000 0010 (注意此处的溢出位),正好是:0000 0010 =2

 2、位运算

5的计算机二进制: 0000 0101

-3的计算机二进制:1111 1101

  1. 按位与(&):
  • 运算符 & 会对两个操作数的每一位执行与操作。当两个位都为1时,结果为1;否则为0。
  • 示例:5&(-3)= 5 

  1. 按位或(|):
  • 运算符 | 会对两个操作数的每一位执行或操作。当至少一个位为1时,结果为1;否则为0。
  • 示例:5|(-3)= -3

  1. 按位异或(^):
  • 运算符 ^ 会对两个操作数的每一位执行异或操作。当两个位不相同(一个为0,一个为1)时,结果为1;否则为0。
  • 示例:5^(-3)= -8

  1. 按位取反(~):
  • 运算符 ~只对一个操作数进行操作,反转其每一位。
  • 示例:~5= -6

  1. 左移(<<):
  • 运算符 << 会将操作数的二进制位向左移动指定的位数,右侧用0填充。
  • 示例:5<<2 = 20

  1. 右移(>>):
  • 运算符 >> 会将操作数的二进制位向右移动指定的位数,左侧根据符号位填充(如果是正数则填充0,如果是负数则填充1)。
  • 示例:-3>>2= -1

  1. 无符号右移(>>>):
  • 运算符 >>> 会将操作数的二进制位向右移动指定的位数,左侧用0填充,无视符号位。
  • 示例:-3>>>2= 1073741823

这些位运算符可以用于高效的低级计算、掩码操作和优化性能等场景,谨慎使用可以带来较好的效能和效果。

 
 
 

 

posted @ 2024-10-24 17:08  我的天啊~  阅读(6)  评论(0编辑  收藏  举报