擅长:python、mysql、java
<p><code>-4</code>的二进制2补码表示是</p>
<pre><code>...11100
</code></pre>
<p>是的,我的意思是在左边有无穷多个<code>1</code>;这是一个二进制重复数字。从技术上讲,<code>4</code>也是一个重复的数字:</p>
<pre><code>...00100
</code></pre>
<p>只是在左边重复<code>0</code>。</p>
<p>你的加法问题是</p>
<pre><code> ...11100
+ ...00100
--------------------
...00000
</code></pre>
<p>运算符<code>^</code>、<code><<</code>和<code>&</code>在计算无限多个二进制数字时没有问题,但问题是有无限多个进位,而您一次只计算一个数字。这永远不会结束。</p>
<p>因此,你必须认识到这个算法何时会陷入这种情况,并采取其他措施来解释它。</p>
<hr/>
<>你在C/C++中没有遇到这个问题,因为,例如,如果{{CD8}}是32位,那么除了最右边的31位数字之外的所有数字都会崩溃成一个比特,所以剩下的所有的都一次携带。</p>
<p>然而,从技术上讲,左移一个<code>int</code>的含义是将值作为整数,而不是位模式,因此,如果两个最重要的位<code>carry</code>永远不同,则调用未定义的行为</em>,因为这样<code>carry << 1</code>将产生溢出)。</p>