二进制补码整数有哪些算术性质?

Which arithmetic properties do two's complement integers have?

整数有多种算术性质,即我们在执行计算时习惯使用的那些:

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

以上哪些性质满足整数的补码。如果结果取决于签名,我也想知道。

我编写了一个程序来检查每个 8 位整数。由于搜索 space 不是那么大,我可以检查每个 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;
        }
      }
    }
  }

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

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

  • + 和 * 操作的关联性
  • + 和 * 操作的可交换性
  • * 对 +
  • 的分配率