C 和位运算的数学方程?

C 和位运算的数学方程?,c,math,bitwise-operators,C,Math,Bitwise Operators,例如,在左移操作中 5除特殊情况外,在其他数学运算中不可能描述位运算 2n-1的and运算与2n的模运算相同。逆为2n-1的and运算可以看作是2n的除法、截断和相乘。这取决于“数学方程”的含义。没有简单的算术题 如果你从形式数论的角度来看,你可以只使用加法、乘法和一阶谓词逻辑来描述按位的“and”(and)“or”和“xor”)。但这肯定不是你的意思,因为这些工具足以描述计算机所能做的任何事情。没有简单的单一操作可以映射到每一个按位操作。然而,它们都可以通过迭代方法(或一个很长的公式)进行模拟

例如,在左移操作中


5除特殊情况外,在其他数学运算中不可能描述位运算


2n-1的and运算与2n的模运算相同。逆为2n-1的and运算可以看作是2n的除法、截断和相乘。

这取决于“数学方程”的含义。没有简单的算术题


如果你从形式数论的角度来看,你可以只使用加法、乘法和一阶谓词逻辑来描述按位的“and”(and)“or”和“xor”)。但这肯定不是你的意思,因为这些工具足以描述计算机所能做的任何事情。

没有简单的单一操作可以映射到每一个按位操作。然而,它们都可以通过迭代方法(或一个很长的公式)进行模拟

可通过以下方式完成:

(((a/1 % 2) * (b/1 % 2)) * 1) +
(((a/2 % 2) * (b/2 % 2)) * 2) +
(((a/4 % 2) * (b/4 % 2)) * 4) +
...
(((a/n % 2) * (b/n % 2)) * n)

式中,n是A和B组成的位数的2减去1。这假设整数除法(余数被丢弃)。

这取决于你所说的“数学”是什么意思。如果你在寻找简单的学校代数,那么答案是否定的。但数学不是神圣的——数学家一直在定义新的运算和概念


例如,您可以将32位数字表示为32个布尔的向量,然后在其上定义“and”运算,在其相应元素之间执行标准布尔运算。“and”运算。这里有一个证明,对于2位按位运算,您不能用 只需
+
-
*
(检查一下,现在刚想出来,谁知道呢):

问题是,我们能找到一个多项式吗

x & y == P(x, y)
在哪里

下面是它的外观:

   0 1 2 3
  --------
0| 0 0 0 0
1| 0 1 0 1
2| 0 0 2 2
3| 0 1 2 3
首先,显然
a0_0==0
。接下来您可以看到,如果
P
是 重写:

                     |------- Q(x, y) --------|
P(x, y) = xy*R(x,y) + a1_0*x + a0_1*y + ...
y
保持为0,而
x
在0、1、2、3上变化;那么Q(x,y)对于 这些价值观中的每一个。同样,如果
x
保持为0且
y
变化。所以
Q(x,y)
可以设置为0而不丧失通用性

但是现在,由于
p(2,2)=2
,但是
2*2==0
,多项式
p
不能 存在

我认为这也会推广到更多的比特

所以答案是,如果你只是在寻找
+
*
-
,不,你不能这样做
是的,它们是总和。考虑一个长度为n的二进制字。它可以写为:; A=a0*2^0+a1*2^1+a2*2^3…an*2^n。其中an是{0,1}的元素

因此,如果a是a中的一位,bn是B中的一位,那么; AandB=a0*b0*2^0+a1*b1*2^1…和*bn*2^n 同样地 AxorB=(a0+b0)mod2*2^0+(a1+b1)mod2*2^1…+(an+bn)mod2*2^n

现在考虑一下身份; Axor1=notA

我们现在有了我们需要的三个运算符(按位AND、按位XOR和按位NOT)

从这两个我们可以做任何我们想要的

例如,按位或

非[(notA)和(notB)]=非[非(AorB)]=AorB

但它并不一定是漂亮的


在回应关于mod2算法不是很基本的评论时,从某种意义上说这是正确的。然而,尽管由于当今计算机的普及,这一点很普遍,但我们在这里讨论的整个主题并不是特别“基本”。OP抓住了一些基本的东西。在被称为“抽象代数”的数学领域中,有一些有限的代数结构,例如模n的加法和乘法(其中n是一些数字,如2、8或2^32)。还有其他使用二进制运算的结构(加法是一种二进制运算,它需要两个操作数并产生一个结果,就像乘法和xor一样),例如xor、and、位移位等,它们“同构”于整数mod n上的加法和乘法。这意味着它们的行为方式相同,它们是关联的、分布的等等(尽管它们可能是交换的,也可能不是交换的,想想矩阵乘法)很难告诉某人从哪里开始寻找更多信息。我想最好的办法是从一本关于形式数学的书开始。(数学证明)你需要它来理解任何高等数学文本。然后是一篇关于抽象代数的文章。如果你是计算机科学专业的学生,你会在课堂上学到很多。如果你是一名数学专业的学生,你会及时深入地学习这些东西。如果你学的是历史专业,我不是在敲历史,我是历史频道的瘾君子,但是你应该换专业,因为你浪费了你的才能

你可能会发现以下有趣的相关问题:什么都没想到。显然,可以对按位或操作数没有共同的1位使用加法,也可以循环使用能够隔离单个位的算术,但我不知道有什么可以实现“并行”,例如(在我的时代,我发明的技巧不止这些)用位运算定义算术运算要容易得多。事实上,这就是CPU设计者所做的。(我确信这是一个严重的过度简化。)我用它来快速计算:嗯,你是不是假设基本的算术运算必须是模2^n?这不是一个非常基本的“数学”假设,但除此之外,你的“2*2==0”主张似乎没有意义。@Henning哦,是的,我是这样假设的。我认为这是因为它们在计算机上就是这样工作的。嗯,它们可能只是指数学上的加法、减法等等。类似地,对于位运算符,可以用与有限宽度整数相同的方式定义无限精度整数。好吧,我想这将是一个不同的证明:)但是(我刚才想到的)对于这种情况实际上更简单:
   0 1 2 3
  --------
0| 0 0 0 0
1| 0 1 0 1
2| 0 0 2 2
3| 0 1 2 3
                     |------- Q(x, y) --------|
P(x, y) = xy*R(x,y) + a1_0*x + a0_1*y + ...