应用于无符号操作数与有符号操作数时,整数除法能否产生不同的结果?

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 发出不同的指令。