二进制补码整数有哪些算术性质?
Which arithmetic properties do two's complement integers have?
整数有多种算术性质,即我们在执行计算时习惯使用的那些:
- '+' 交换性:
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 位整数。由于搜索 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;
}
}
}
}
我使用这样的程序来验证值的真实性,针对每种情况稍微修改程序。
我发现有符号和无符号整数都具有上面列出的所有属性:
- + 和 * 操作的关联性
- + 和 * 操作的可交换性
- * 对 +
的分配率
整数有多种算术性质,即我们在执行计算时习惯使用的那些:
- '+' 交换性:
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 位整数。由于搜索 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;
}
}
}
}
我使用这样的程序来验证值的真实性,针对每种情况稍微修改程序。
我发现有符号和无符号整数都具有上面列出的所有属性:
- + 和 * 操作的关联性
- + 和 * 操作的可交换性
- * 对 + 的分配率