<p>这是一种将任意基中的数字转换为整数的方法:</p>
<pre><code>def to_int(digits, base=1024):
place = 1
ret = 0
for digit in reversed(digits):
ret += place*digit
place *= base
return ret
</code></pre>
<p>如果你的基数总是2的幂(<code>2^10 = 1024</code>),你也可以这样做(可能效率更高):</p>
<pre><code>def to_int2(digits, log2base=10):
ret = 0
for digit in digits:
ret <<= log2base
ret += digit
return ret
</code></pre>
<p>要将其表示为二进制字符串,可以执行以下操作:</p>
<pre><code>print('{:0b}'.format(to_int(digits=(981, 5, 0, 1001))))
print('{:0b}'.format(to_int2(digits=(981, 5, 0, 1001))))
</code></pre>
<p>两者的结果是相同的(我假设最左边的是最重要的‘数字’;否则您必须<code>reverse</code>‘数字’的顺序):</p>
<pre><code>1111010101000000010100000000001111101001
</code></pre>
<p>(读取输入和减法应该是直截了当的。)</p>
<hr/>
<p>对于您添加的示例,其工作方式如下:</p>
<pre><code>x = to_int2(digits=(6, 15), log2base=4)
y = to_int2(digits=(2, 7), log2base=4)
print(x, y) # 111 39
diff = x-y
print('{:08b}'.format(diff)) # 01001000
print('{:08b}'.format(-diff & 0xff)) # 10110111
</code></pre>
<p>如果需要动态获取格式和掩码,可以尝试以下操作:</p>
<pre><code>d = 111-39
bit_length = max(int.bit_length(d), int.bit_length(-d))
fmt = '{{:0{}b}}'.format(bit_length+1)
mask = (1<<bit_length+1) - 1
print(fmt.format(d))
print(fmt.format(-d & mask))
</code></pre>
<p>不确定是否覆盖了所有的边缘情况。。。但我相信你会从那里得到它!你知道吗</p>