两个补码整数具有哪些算术性质?



有多个整数的算术属性,即我们在执行计算时使用的那些:

  • "+"交换性: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

我知道交换性关系对于这两个补整数成立。但我不确定其他属性。

以上哪个性质满足两个补整数。如果结果依赖于签名,我也想知道。

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

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;
}
}
}
}

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

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

  • +和*运算的结合性
  • +和*运算的交换性
  • 分配性*/+

最新更新