Hatsune_Haruna 2021-12-18 09:20 采纳率: 100%
浏览 46
已结题

c++中求模取余运算%的问题(int % unsigned)

本人在调试他人代买的过程中,无意间注意到了这样一个问题:int类型的负数,与unsigned类型的正数,进行求模(取余)%运算,但是结果并不是我想要的,我猜测是是unsigned类型闯祸,但是查找资料没有头绪。

#include <iostream>
using namespace std;

int main() {
    int a = -100;
    unsigned b = 500;
    a %= b;
    cout << a << endl;
    system("pause");
    return 0;

}

运行结果是:196

我一开始以为运行结果会是-100,结果却是196。如果将代码中的a赋值为-10,那么结果就是286。似乎都跟296这个数有关系?为啥会这样?

  • 写回答

2条回答 默认 最新

  • 关注

    也就是说会把int类型转成unsigned int来计算。
    10的二级制是: 0000 0000 0000 0000 0000 0000 0000 1010
    -10的二进制是在10的二进制码基础上取反+1,也就是 1111 1111 1111 1111 1111 1111 1111 0110
    -10的十六进制是 FF FF FF F6,转成unsigned int后值是 4294967286, 4294967286除以500取余数就是286

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月25日
  • 已采纳回答 12月18日
  • 创建了问题 12月18日