有多个整数的算术属性,即我们在执行计算时使用的那些:
- "+"交换性:
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;
}
}
}
}
我使用这样的程序来验证值的真实性,每种情况下稍微修改一下程序。
我发现有符号整数和无符号整数都具有上面列出的所有属性:
- +和*运算的结合性
- +和*运算的交换性
- 分配性*/+