擅长:python、mysql、java
<p>如果最高位是1,则2的补码减去<code>(1<<bits)</code>。以8位为例,这给出了127到-128的范围。</p>
<p>一个整数的二补函数。。。</p>
<pre><code>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 # return positive value as is
</code></pre>
<p>从二进制字符串开始是特别容易的。。。</p>
<pre><code>binary_string = '1111' # or whatever... no '0b' prefix
out = twos_comp(int(binary_string,2), len(binary_string))
</code></pre>
<p>对我来说更有用的是十六进制值(在这个例子中是32位)。。。</p>
<pre><code>hex_string = '0xFFFFFFFF' # or whatever... '0x' prefix doesn't matter
out = twos_comp(int(hex_string,16), 32)
</code></pre>