Nik*_*ntz 1 c twos-complement invert
我不能让2完成计算工作.
我知道C编译~b如果b = 5则将所有位反转为-6.但为什么?
int b = 101,反转所有位是010然后2完成符号我只加1但是变成011即3这是错误的答案.
我应该如何计算位反转算子〜?
类似的问题:如果a = 17,〜(~a)= 17怎么样?我们必须做两次完全计算.
实际上,这里的5通常表示在内存中(16位整数):
0000 0000 0000 0101
Run Code Online (Sandbox Code Playgroud)
反转5时,翻转所有位以获得:
1111 1111 1111 1010
Run Code Online (Sandbox Code Playgroud)
实际上这是十进制形式的-6.我想在你的问题中,你只是简单地翻过最后三位,实际上你必须考虑构成整数的所有位.
问题b = 101 (5)是你选择了一个太少的二进制数字.
binary | decimal
~101 = 010 | ~5 = 2
~101 + 1 = 011 | ~5 + 1 = 3
Run Code Online (Sandbox Code Playgroud)
如果选择4位,您将获得预期的结果:
binary | decimal
~0101 = 1010 | ~5 = -6
~0101 + 1 = 1011 | ~5 + 1 = -5
Run Code Online (Sandbox Code Playgroud)
只有3位,您可以在2的补码表示中编码从-4到+3的整数.使用4位,您可以在2的补码表示中编码从-8到+7的整数.
-6被截断为2,-5被截断为3比特中的3.你需要至少4位.
正如其他人已经指出的那样,~只需反转一个值中的所有位,所以~~17= 17.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |