小编Poo*_*oSH的帖子

C++ 中奇怪的有符号/无符号整数除法

int main(int argc, char *argv[]) {
    int i = -100;
    unsigned u = 10;

    cout << "i = " << i << endl;

    i *= u;
    cout << "i*10 = " << i << endl;

    i /= u;
    cout << "i = " << i << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果输出不是这样的话,我就不会在这里问这个问题:

i = -100
i*10 = -1000
i = 429496629
Run Code Online (Sandbox Code Playgroud)
  • 在乘法的情况下,无符号会隐式转换为有符号。到目前为止,一切都很好。
  • 然而,在除法的情况下,有符号会隐式转换为无符号,执行无符号除法;然后转换回签名。

有谁知道为什么会发生这种情况?因为这对我来说没有任何意义。

PS 预期的行为是通过显式类型转换实现的:i /= (int) u;

c++

6
推荐指数
1
解决办法
266
查看次数

标签 统计

c++ ×1