擅长:python、mysql、java
<p>与其他整数运算一样,位操作具有无限精度</p>
<pre><code>>>> (0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef ^
... 0x64004ee264004ee264004ee264004ee264004ee264004ee264004ee264004ee2 ==
... 0xbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00d)
True
</code></pre>
<p>如果您试图匹配其他语言中例程的输出,可以通过使用适当的位掩码将结果钳制到一定数量的位<code>result & 0xff</code>表示1个字节,<code>result & 0xffff</code>表示2个字节,<code>result & 0xffffffff</code>表示4个字节,等等</p>
<blockquote>
<p>...will it be <code>10 & 11</code> or <code>0010 & 0011</code>?</p>
</blockquote>
<p>没有区别<code>0b10 == 0b0010</code>和<code>0b11 == 0b0011</code>。它们是完全相同的数字;左边的零填充不会改变任何东西。你可以把这些数字想象成左边有无穷多个零</p>
<p>我向你保证,我不是故意迟钝。你会问,“是A还是B?”答案是,“A和B都是一样的东西。”</p>
<P>在java或C++或C语言或任何其他具有固定宽度整数类型的语言中,它们执行16位或32位或64位操作的事实对代码的行为有明显的影响。输出结果被截断为输入类型的位宽度。您必须始终考虑溢出以及数字可能会如何缠绕。添加两个数字可能会导致较小的数字。固定宽度位操作有一个您必须考虑的可见效果</p>
<p>Python使用无限精度的整数,所以没有这样的东西。是的,如果你偷看一下无限制精度整数库是如何工作的,它会在其中的某个地方使用固定大小的整数。它最终将执行执行32位AND或64位XOR或任何情况的汇编指令。但所有这些都是Python内部的。它对我们用户来说是不可见的。外部可见的行为是整数似乎具有无限精度。我们可以将每个数字视为在概念上左侧有无限多个0位(如果数字为负数,则为无限多个1位)</p>