1、计算机中数字的二进制
在计算机中,二进制正数和负数的表示方法不同。正数直接以其二进制形式表示,而负数则通过补码的形式表示。
具体转换步骤
- 原码:正数的原码与反码、补码相同,负数的原码是其绝对值的二进制表示,但最高位为1。例如,-5的原码为10000000 00000000 00000000 00000101。
- 反码:负数的反码是其原码除符号位外各位取反。例如,-5的反码为11111111 11111111 11111111 11111010。
- 补码:负数的补码是其反码加一。例如,-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;否则为0。 - 示例:5&(-3)= 5
- 按位或(|):
- 运算符
|
会对两个操作数的每一位执行或操作。当至少一个位为1时,结果为1;否则为0。 - 示例:5|(-3)= -3
- 按位异或(^):
- 运算符
^
会对两个操作数的每一位执行异或操作。当两个位不相同(一个为0,一个为1)时,结果为1;否则为0。 - 示例:5^(-3)= -8
- 按位取反(~):
- 运算符
~
只对一个操作数进行操作,反转其每一位。 - 示例:~5= -6
- 左移(<<):
- 运算符
<<
会将操作数的二进制位向左移动指定的位数,右侧用0填充。 - 示例:5<<2 = 20
- 右移(>>):
- 运算符
>>
会将操作数的二进制位向右移动指定的位数,左侧根据符号位填充(如果是正数则填充0,如果是负数则填充1)。 - 示例:-3>>2= -1
- 无符号右移(>>>):
- 运算符
>>>
会将操作数的二进制位向右移动指定的位数,左侧用0填充,无视符号位。 - 示例:-3>>>2= 1073741823
这些位运算符可以用于高效的低级计算、掩码操作和优化性能等场景,谨慎使用可以带来较好的效能和效果。
标签:操作数,运算,示例,补码,负数,运算符,原码 From: https://www.cnblogs.com/bestzhang/p/18499970