假设我有一个在modn中工作的整数系统所以我的整数加一到n-1实际上等于零。
进一步假设您将一个数字的两个恭维定义为当加到它本身等于零时的数字。即:

x + C(x) = 0   (here C(x) is the twos compliment of x)

总的来说,我该怎么做才能得到X的称赞呢?
真正的问题是:
如果x是一个二进制数,我可以把x的所有位反转,然后再加上一个。
如果x是一个三元数,这就变得有点棘手了。问题是它不匹配偶数个比特,所以你会试图翻转2/3个比特或其他东西,我不知道物理意义是什么。
所以我的问题是:我怎么能接受两人对一些武断基础的恭维呢?

最佳答案

我假设你是在对某个整数进行基运算,而你是在对某个固定整数进行模运算。换句话说,最多使用s个位置(或数字)。
因此,在这个系统中,整数表示为序列s > 0,其中每个s^(n+1)都是n > 0n+1之间的一个数字例如,如果[xn ... x0]xi,则表示法0将对应于十进制数s-1
一般来说,上述表示的十进制值为:

x = xn*s^n + ... + x0*s^0

现在,你的问题在于找到模的表示(记住我们只能使用数字)。
定义,对于每个数字s=3其对n=4的补码为
c(xi) = s - 1 - xi

注意,在二进制情况下,当[01201]时,0*3^4 + 1*3^3 + 2*3^2 + 0*3^1 + 1*3^0 = 27 + 18 + 1 = 46的补码符合相同的定义还要注意
xi + c(xi) = s - 1                                          eq(1)

现在让我在这里使用一个更简单的符号并调用-x然后序列
y = [yn ... y0]

我们可以称之为s^(n+1)的补体。它也是s+1xi的表示,因此要获得s,只需将s=2添加到2例如,在yi = c(xi)的情况下,我们会有s,因为每个位置的数字总和x
原因很简单:
[yn ... y0] + [xn ... x0]
            = yn*s^n + ... + y0*s^0 + xn*s^n + ... + x0*s^n
            = (yn+xn)*s^n + ... + (y0+x0)*s^0
            = (s-1)*sˆn + ... + (s-1)*s^0              ; by eq(2)
            = s^(n+1) + ... + sˆ1 - (s^n + ... + s^0)
            = s^(n+1) - 1
            = -1  modulo s^(n+1)

因此,事情的工作方式与它们在-x - 1和模s^(n+1)时的工作方式类似(32位)从这个意义上说,二进制大小写没有什么特别之处。

关于algorithm - 2s补充一般形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39681019/

10-11 15:20