Math 如何在算术电路中建立比较运算符(比较器)

Math 如何在算术电路中建立比较运算符(比较器),math,logic,arithmetic-expressions,integer-arithmetic,circuit,Math,Logic,Arithmetic Expressions,Integer Arithmetic,Circuit,我试图把一个basic程序转换成一个算术电路。我被困在将大于运算符转换为算术电路的步骤上。具体来说,我不知道如何将以下内容转换为算术电路(其中输入x,y): 如果x>=y: 返回1 其他: 返回0 为了清楚起见,我需要能够用一个算术电路来表达这一点。这意味着我需要能够只使用数字的加法和乘法(在Z_p中)来计算它 我一直在网上搜索解决方案,但我找到的所有东西都告诉我如何使用布尔电路。我知道我可以将数字转换成它们的位字符串,并以布尔方式进行转换。我想知道做这件事的其他方法。本演示可能只涉及加法和乘法

我试图把一个basic程序转换成一个算术电路。我被困在将大于运算符转换为算术电路的步骤上。具体来说,我不知道如何将以下内容转换为算术电路(其中输入x,y):

如果x>=y:
返回1
其他:
返回0

为了清楚起见,我需要能够用一个算术电路来表达这一点。这意味着我需要能够只使用数字的加法和乘法(在Z_p中)来计算它


我一直在网上搜索解决方案,但我找到的所有东西都告诉我如何使用布尔电路。我知道我可以将数字转换成它们的位字符串,并以布尔方式进行转换。我想知道做这件事的其他方法。本演示可能只涉及加法和乘法,但我不知道如何进行。

如果对数据使用正确的编码,则不需要任何电路。用于编码有符号整数的最佳和最广泛的方法是。
正数通过二进制代码和负数a<0;通过考虑2^n-| A |=2^n+A,其中n是代码的位数n,表示为正

二的补充有(至少)两个主要优点。
第一,它大大简化了算术运算。例如,当一个负数a由2^n+a进行算术编码时,只要忽略2^n以上的位,并且添加有符号数与添加无符号数相同,就不必关心操作数的符号

第二个优点是正数在0..2^(n-1)-1的范围内,并且其最高有效位始终未设置。负数的范围为-1..-2^(n-1)。一旦添加到2^n,其代码范围为2^(n-1)…2^n-1,并对应于设置了最高有效位的数字。所以,要知道一个数字是否>=0,只需要测试它的最高有效位

因此,没有真正的“电路”或算术运算符可以做到这一点。在程序中,这可以通过使用MSB计算“and”来完成

int is_positive(int x) { return (x & (1<<31)) == 0 ); }
int为正(intx){return(x&(1