【问题标题】:Which arithmetic properties do two's complement integers have?二进制补码整数有哪些算术性质?
【发布时间】:2021-11-27 11:41:30
【问题描述】:

整数有多个算术属性,我们在执行计算时习惯使用这些属性:

  • '+' 交换性:a+b == b+a
  • '+' 关联性:(a+b)+c == a+(b+c)
  • '*' 交换性:a*b == b*a
  • '*' 关联性:(a*b)*c == a*(b*c)
  • “*”对“+”的分布:a*(b+c) == a*b + a*c

我知道交换关系适用于二进制补码整数。但我不确定其他属性。

二进制补码整数满足上述哪些属性。如果结果取决于签名,我也想知道。

【问题讨论】:

    标签: twos-complement arithmetic-expressions


    【解决方案1】:

    我编写了一个检查每个 8 位整数的程序。由于搜索空间不是很大,我可以检查每个 8 位二进制补码整数。这不是一个严格的数学证明,但对我的目的很有效

    for(I8 x = 0; x != int8Max; ++x){
        for(I8 y = 0; y != int8Max; ++y) {
          for(I8 z = 0; z != int8Max; ++z) {
            I8 t1=x+y;
            I8 r1=t1*z;
            I8 t2=x*z;
            I8 t3=y*z;
            I8 r2=t2+t3;
            if(r1!=r2) {
              printf("Achtung!!\n");
              break;
            }
          }
        }
      }
    

    我使用这样的程序来验证值的真实性,并针对每种情况稍微修改程序。

    我发现有符号和无符号整数都具有上面列出的所有属性:

    • + 和 * 操作的关联性
    • + 和 * 操作的交换性
    • * 在 + 上的分布

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 1970-01-01
      • 2015-11-28
      • 2015-06-08
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 2013-03-28
      相关资源
      最近更新 更多