如何在二进制有符号数(冗余二进制表示)中除以 2?换档行不通?
问问题
535 次
1 回答
0
冗余二进制表示只是以下形式的表达式:
\sum_{i=0}^n d_i 2^n
其中d_i
's 是从一个更大的集合中提取的,而不仅仅是{0,1}
.
除以二或右移到
\sum_{i=0}^{n-1} d_{i+1} 2^n + f(d_0)
诀窍在于如何处理d_0
.
如果您的 RBR 有数字表格{0,1,2}
并且最低有效数字为 2,那么您必须添加1
到结果中以进行补偿,因此f(0) = 0
, 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
=0
因此,最终仅移位的幼稚方法确实有效,您只需要一个软糖因素来解释移位数字的任何冗余编码。
如果您选择的 RBR 包含更多选项,则需要相应地调整软糖因子。
于 2010-05-07T18:54:06.650 回答