形成二进制数的补码的一种捷径方法是从右侧复制位,直到复制了一位,然后对剩余位求补(反转)。
这在SO上有解释here https://stackoverflow.com/questions/33592801/converting-binary-to-negative-binary/33593355#33593355还有关于维基百科 https://en.wikipedia.org/wiki/Two's_complement#Converting_to_two.27s_complement_representation.
What is not解释了为什么这个快捷方式有效,也就是说,为什么它产生与反转所有位并加 1 相同的结果。所以,我的问题是,为什么这有效?
它之所以有效,是因为二进制数加一是通过从右侧将所有 1 翻转为 0 直到达到 0,将其翻转为 1 并停止(本质上是携带 1 与 1 相加的溢出)来完成的。
因此,一种方法仅翻转第一个位左侧的位,而另一种方法则翻转all位,然后将第一个 1(现在为 0)及其右侧的位翻转回来。
e.g.:
01000100
10111100 // copy bits until a 1 is reached, then flip the rest
vs
01000100
10111011 // invert all bits:
+ 1 // add one
10111100
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)