计算函数中的模给出了与直接使用%运算符不同的答案

Calculating modulus in a function gives different answer from using % operator directly

本文关键字:运算符 答案 函数 计算      更新时间:2023-10-16

my_mod.cpp:

#include <iostream>
using namespace std;
unsigned int my_mod(int a, unsigned int b)
{
    int result;
    cout << "tat=t" << a << endl;
    cout << "tbt=t" << b << endl;
    cout << "ta%bt=t" << a%b << endl;
    result = a%b;
    if (result < 0) {result += b;}
    return result;
}
int main()
{
    cout << "-1%5 = " << -1%5 << endl;
    cout << "my_mod(-1,5) = " << my_mod(-1,5) << endl;
    return 0;
}

编译方式:g++/my_mod.cpp

结果在:

-1%5 = -1
    a   =   -1
    b   =   5
    a%b =   0
my_mod(-1,5) = 0

这里到底发生了什么我只是不明白可能会发生什么?!这不可能是由于全球范围,对吧?!我的意思是,这是完全相同的%-表达式。。。他们怎么能得到0和-1?!(顺便说一下,不是想要的4。)

请,如果有人可以的话,向我解释一下。。。我只花了几天时间就把一个更广泛的错误缩小到了这个范围。说真的,我快要哭了。

在上面的例子中,我如何使我的(全局)自己的模量返回4??

这是因为您使用的是无符号的int,有符号的int(-1)被提升为-1%UINT_MAX,因此您的操作变为(-1%UINT_MAX)%5=0(感谢jrok提供了更详细的原因)

尝试

cout << "ta%bt=t" << a%(int)b << endl;
result = a%(int)b;

函数签名为:int my_mod(int a,unsigned int b)

或者只使用函数签名:int my_mod(int a,int b)