【发布时间】:2019-10-09 12:21:45
【问题描述】:
我正在尝试使用按位运算设置数字的第 n 位。我得到第 n 个移位 1(n 是从 0 开始的 LSB 的索引),然后使用 OR 操作来设置第 n 位。 适用于正数,理论上也适用于负数,因为在 MSB 上与 0 进行 ORing 应该没有变化。但是当我在 Python 中运行这个实现时,我没有得到想要的结果。
def bitwise_setNthBit(num, n):
'''
Check if n th bit is set in the number num or not
'''
n_shifted_one = 1<<n
print(num, bin(num), n_shifted_one, bin(n_shifted_one))
return num | n_shifted_one
num, n = 10, 2
result = bitwise_setNthBit(num, n)
print('Setting LSB at position {} on {} results in {}'.format(n, num, result))
num, n = -18, 2
result = bitwise_setNthBit(num, n)
print(bin(result))
print('Setting LSB at position {} on {} results in {}'.format(n, num, result))
当使用 -18 作为数字并设置第 2 位时,我得到 -18 以二进制表示为 -0b10010,而 1
【问题讨论】:
标签: python bit-manipulation bitwise-operators bit-shift bitwise-or