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

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月26日
  • 已采纳回答 12月18日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用