【问题标题】:mathematical equation for AND bitwise operation?与位运算的数学方程?
【发布时间】:2011-11-04 04:54:55
【问题描述】:

以左移操作为例,

5 << 1 = 10

10 << 1 = 20

然后可以建立一个数学方程,

n << 1 = n * 2.

如果存在左移运算的方程,

那么有没有可能还有一个

数学方程 AND 操作?

或任何其他位运算符?

【问题讨论】:

  • 什么都没有想到。显然,如果操作数没有共同的 1 位,您可以使用加法进行按位或,并且您可以循环计算设法隔离单个位的算术,但我不知道任何可以执行“并行”与的操作,例如. (在我这个时代,我发明了不止这么几个技巧。)
  • 用位运算来定义算术运算要容易得多。事实上,这就是 CPU 设计人员所做的。 (我敢肯定这是过于简单化了。)
  • 我用它来快速计算:bitwiseoperatorcalculator.com

标签: c math bitwise-operators


【解决方案1】:

没有直接的单个操作可以映射到每个位操作。但是,它们都可以通过迭代方式(或一个非常长的公式)来模拟。

(a & b)

可以通过:

(((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 是 2 到 A 和 B 组成的位数减一。这假设整数除法(余数被丢弃)。

【讨论】:

    【解决方案2】:

    这取决于您所说的“数学方程式”是什么意思。没有简单的算术。

    如果您从正式的数论角度来看,您可以仅使用加法、乘法和来描述按位“与”(以及“或”和“异或”) strong>——从外行的角度来看,这是一个相当大的“与”——一阶谓词逻辑。但这肯定不是您的意思,尤其是因为这些工具足以描述计算机可以做的任何事情

    【讨论】:

      【解决方案3】:

      除特定情况外,无法在其他数学运算中描述位运算。

      2n-1 的与运算与 2n 的模运算相同。与 2n-1 取反的与运算可以看作是除以 2n、截断和乘以相同。

      【讨论】:

      • 你能举例说明你的意思吗?
      【解决方案4】:

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

      例如,您可以将 32 位数字表示为 32 个布尔值的向量,然后对它们定义“与”运算,在其对应元素之间执行标准布尔“与”运算。

      【讨论】:

        【解决方案5】:

        这是一个证明,对于 2 位按位运算,您不能用 只是 + -*检查一下,现在才想出来,所以,谁知道):

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

        x & y == P(x, y)
        

        在哪里

        P(x, y) = a0_0 + a1_0*x + a0_1*y + a2_0*x^ + ...
        

        这就是它的样子:

           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) 必须为 0 这些值中的每一个。同样,如果 x 保持 0 并且 y 变化。所以Q(x, y) 在不失一般性的情况下可以设置为 0。

        但是现在,由于P(2, 2) = 2,然而2 * 2 == 0,多项式P 不能 存在。

        而且,我认为这也可以推广到更多位。

        所以答案是,如果您只查找 +*-,不,您不能这样做 它。

        【讨论】:

        • 嗯,您是否以某种方式假设基本算术运算必须以 2^n 为模?这不是一个非常基本的“数学”假设,否则您的“2*2==0”声明似乎没有意义。
        • @Henning 哦,是的,我假设这个。我假设是因为这就是它们在计算机上的工作方式。
        • 嗯,它们可能只是指数学加法、减法等。位运算符也是如此,可以像定义有限宽度整数一样定义无限精度整数。
        • 好吧,我想那将是一个不同的证明:)
        • 但是(这让我印象深刻)实际上对于这种情况更简单:假设x & yxy 中的多项式。那么,特别是x & 1 将是x 中的多项式。但那不可能,因为它有无数个零,但又不是全零。
        【解决方案6】:

        是的,它们是总和。考虑一个长度为 n 的二进制字。可以写成如下; A=a0*2^0+a1*2^1+a2*2^3....an*2^n。其中 an 是 {0,1}

        的元素

        因此,如果 an 在 A 中是一个位,而 bn 在 B 中是一个位,那么; AandB=a0*b0*2^0+a1*b1*2^1...an*bn*2^n 相似地 AxorB=(a0+b0)mod2*2^0+(a1+b1)mod2*2^1...+(an+bn)mod2*2^n

        现在考虑身份; Axor1=notA

        我们现在有了我们需要的三个运算符(位与、位异或和位非)

        从这两个我们可以制作任何我们想要的东西。

        例如,按位或

        不是[(notA)and(notB)]=not[not(AorB)]=AorB

        虽然不保证漂亮。

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

        【讨论】:

        • 您对 mod2 评论的回复不属于答案。另外,我不相信您实际上是在回答 OP 提出的问题。很明显,通过位运算符的某种组合可以完成任何数学运算,否则计算机将无法工作。问题很简单:x AND y 是否映射到某种数学恒等式,例如 x LEFT SHIFT 1 映射到 x * 2,还是有任何其他类似的映射。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多