如何在二进制有符号数字(冗余二进制表示)中除以2?转移不会正常工作?
答案 0 :(得分:0)
冗余二进制表示只是表单的表达式:
\sum_{i=0}^n d_i 2^n
其中d_i
是从比{0,1}
更大的集合中提取的。
除以2或向右移动需要
\sum_{i=0}^{n-1} d_{i+1} 2^n + f(d_0)
诀窍在于如何处理调整d_0
的冗余表示。
如果您的RBR的数字为{0,1,2}
,且最低有效数字为2,那么您必须将1
添加到结果中以进行补偿,因此f(0) = 0
,{{ 1}},f(1) = 0
应该有用。
f(2) = 1
,所以4 = 12_base2
= 12_base2 >> 1
= 1 + f(2)
= 1 + 1
= 2_base2
符合预期。 2
,所以6 = 102_base2
= 102_base2 >> 1
= 10_base2 + f(2)
= 11_base2
您可以通过设置3
为签名的冗余二进制表示形式(即d_i
中的{-1,0,1}
)获得类似的内容。
f(-1) = -1
,所以1 = 1(-1)_base2
= 1(-1)_base2 >> 1
= 1 + f(-1)
= 1 - 1
所以最终只是转移的天真方法确实有效,你只需要一个软糖因子来解释移位数字的任何冗余编码。
如果您选择的RBR包含更多选项,则需要相应地调整软糖因子。