两个';Python中的s补码算法
我必须对3D曲面进行2的补码转换,每个元素代表12位2的补码 为了转换数组,我有以下代码:两个';Python中的s补码算法,python,Python,我必须对3D曲面进行2的补码转换,每个元素代表12位2的补码 为了转换数组,我有以下代码: for x in np.nditer(array, op_flags=['readwrite']): x[...] = twos_comp(x, 12) 在这里,我在线找到了以下功能: def twos_comp(val, bits): """compute the 2's complement of int value val""" if (val & (1 << (bit
for x in np.nditer(array, op_flags=['readwrite']):
x[...] = twos_comp(x, 12)
在这里,我在线找到了以下功能:
def twos_comp(val, bits):
"""compute the 2's complement of int value val"""
if (val & (1 << (bits - 1))) != 0: # if sign bit is set e.g., 8bit: 128-255
val = val - (1 << bits) # compute negative value
return val
但同样,数据看起来并不“正确”。有什么建议吗
谢谢
我所说的“不对”是指我期望的曲面
但是,我得到的曲面看起来是这样的(还有一个80的乘数,这解释了为什么z轴上的数字如此之大)这里已经有了一些相关内容: 在这里:
使用这个简单的函数
def twos_comp(val):
return 0b111111111111 - val # 12 ones
你可以试一下
val = 0b111100001111
print("{:012b}".format(twos_comp(val)))
你会得到
00001110000
如果不是您想要的,请使用此函数
def twos_comp(val):
return 0b1000000000000 - val # 1 with 12 zeroes
你所说的“毫无意义”和“看起来不对劲”是什么意思。你能分享一些样品并说明退回的和应该退回的吗?简言之,a会有很大帮助:)谢谢,我已经阅读了其中的大部分,这就是我获得现有代码的来源。
np.nditer(数组,op_标志=['readwrite'])
做了我认为它做的事情吗?也就是通过数组的每个元素循环,通过循环中代码的结果更新值谢谢,我想这已经得到了。你知道为什么我会对我的期望持否定态度吗?
def twos_comp(val):
return 0b1000000000000 - val # 1 with 12 zeroes