应用于无符号操作数与有符号操作数时,整数除法能否产生不同的结果?
Can integer division yield a different result when applied on unsigned operands vs signed operands?
当然,我问的是实际的“位数据”returned。
换句话说,下面的函数可以return false
:
bool func(uint x, uint y)
{
return x / y == (uint)((int)x / (int)y);
}
?
绝对可以。 4294967295 / 2 == 0x7fffffff,但 -1 / 2 == 0.
big 值是 uint32_t
类型,所有位都已设置,-1 也是一个 32 位值 int32_t
,所有位都已设置。设置参数的最高位后,您应该会得到不同的结果。例外情况是 a / a == 1
,对于有符号和无符号除法,当 a != 0
.
当算术运算介于有符号和无符号操作数之间时,编译器知道为 CPU 发出不同的指令。
当然,我问的是实际的“位数据”returned。
换句话说,下面的函数可以return false
:
bool func(uint x, uint y)
{
return x / y == (uint)((int)x / (int)y);
}
?
绝对可以。 4294967295 / 2 == 0x7fffffff,但 -1 / 2 == 0.
big 值是 uint32_t
类型,所有位都已设置,-1 也是一个 32 位值 int32_t
,所有位都已设置。设置参数的最高位后,您应该会得到不同的结果。例外情况是 a / a == 1
,对于有符号和无符号除法,当 a != 0
.
当算术运算介于有符号和无符号操作数之间时,编译器知道为 CPU 发出不同的指令。