擅长:python、mysql、java
<p>这个定义是因为2是整数的补码表示。所以“真的”<code>~n</code>是{<cd2>},所有的位都翻转了。但是“全部”翻转位的结果首先取决于<code>n</code>有多少位。CPython在内部使用固定宽度的整数,但是语言不会将它们呈现给程序员,因此通常只有算术定义才有意义。但是这个定义的动机是翻转固定宽度2的补码整数的位。在</p>
<blockquote>
<p>1110 = ~2 can be easily visualized as -2</p>
</blockquote>
<p><code>...1110</code>不是<code>~2</code>,而是<code>-2</code>。<code>~2</code>是<code>...1101</code>,因为<code>2</code>是{<cd11>}。在</p>
<blockquote>
<p>1101 = ~3 can't be visualized like this</p>
</blockquote>
<p><code>...1101</code>不是<code>~3</code>,而是<code>-3</code>。<code>~3</code>是<code>...1100</code>,因为<code>3</code>是{<cd18>}。在</p>
<p>我把它形象化的方式(当我通过训练把它想象成一个数学家的时候,我宁愿不考虑具体的数字),就是知道在2的补码中,<code>...10...</code>总是2的一个否定幂。所以<code>...10</code>是-2,<code>...100</code>是-4,等等</p>
<p>然后为了知道<code>...110110</code>是什么,它是<code>...110000</code>+<code>110</code>,也就是说<code>-16</code>+<code>6</code>,这就是<code>-10</code>。在</p>
<p>当然<code>...110110</code>也是(通过位翻转)<code>~1001</code>,也就是说{<cd30>},根据公式它是<code>-9-1</code>,它也是<code>-10</code>。所以系统工作;-)</p>