繁体   English   中英

负数和正数之间的按位 AND (&)?

[英]Bitwise AND (&) between negative and positive numbers?

我一直在学习使用位操作来添加两个数字,但我在理解 Python 中如何处理负数时遇到了问题。 例如,如果我尝试&以下内容:

-0b1111010 (-122) & 0b11011110 (222)

不应该是:

   0b1111010 
& 0b11011110
------------
  0b01011010

因为只有 1 的组合会导致 1?

现在python给出0b10000110

当使用 python 将负数添加到正数时,我找不到任何资源。

-122 is  122      0...00001111010
         Flipped  1...11110000101
         +1       1...11110000110 = x

222 is            0...00011011110 = y

x & y             0...00010000110

正如您所演示的,这就是 Python 所显示的内容。

请注意,-122 一直到最高有效位前导 1。

这是因为 Python 使用二进制补码二进制有符号整数表示。 这是一段代码,其输出显示了实际的字节数据,并说明了为什么会得到这样的结果:

import math

def bin_format(integer):
    num_bytes = math.ceil(integer.bit_length()/8)  # Number required to represent value.
    ba = integer.to_bytes(num_bytes, 'big', signed=integer<0)
    return ''.join('{:08b}'.format(b) for b in ba) + ' ({:4d})'.format(integer)

print('  ' + bin_format(-122))
print('& ' + bin_format(222))
print('=' * 17)
print('  ' + bin_format(-122 & 222))

输出:

  10000110 (-122)
& 11011110 ( 222)
=================
  10000110 ( 134)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM