相关疑难解决方法(0)

具有负值的模运算符

为什么这样的操作:

std::cout << (-7 % 3) << std::endl;
std::cout << (7 % -3) << std::endl;
Run Code Online (Sandbox Code Playgroud)

给出不同的结果?

-1
1
Run Code Online (Sandbox Code Playgroud)

c++

156
推荐指数
3
解决办法
13万
查看次数

带负操作数的C++ size_t模数运算

因此,模数运算可以为您提供三个值:

然后:

-7%5 = 3(数学,余数> = 0)

-7%5 = -2(C++)

-7%(size_t)5 = 4(C++)

另一个例子:

-7%4 = 1(数学,余数> = 0)

-7%4 = -3(C++)

-7%(size_t)4 = 1(C++)

当左手操作数为正时,所有三种方法之间的答案是相同的.但对于负面价值观,他们似乎都有自己的方法.如何在C++中计算无符号操作数上的模运算值?

c++ size-type c++11

5
推荐指数
1
解决办法
661
查看次数

signed int modulo unsigned int产生无意义的结果

我需要在C中执行一个真正的数学模.我有理由允许模数参数的负数,因为我的模块计算会产生负中间结果,必须将其放回到最少残留系统中.但是,我写道,允许负面模块是没有意义的

unsigned int mod( int x, unsigned int m )
{
    int r = x % m;
    return r >= 0 ? r : r + m;
}
Run Code Online (Sandbox Code Playgroud)

然而,使用负数和正模块调用此类函数

printf("%u\n", mod(-3, 11));
Run Code Online (Sandbox Code Playgroud)

产生输出

1
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.你能解释一下吗?

编辑:我知道运算符%与数学模数不同,我知道如何定义正数和负数.我问的是它会为不同的签名做些什么,而不是不同的标志.

c modulo signedness mod

2
推荐指数
1
解决办法
504
查看次数

当一个是size_t类型而另一个是<0时,为什么mod操作返回0?

有c ++代码:

string s = "abc";
size_t len = s.length();
cout<<(-1%len)<<endl;//print 0
Run Code Online (Sandbox Code Playgroud)

但如果将size_t更改为int:

string s = "abc";
int len = s.length();
cout<<(-1%len)<<endl;//print -1
Run Code Online (Sandbox Code Playgroud)

为什么会这样,有人可以解释一下,谢谢!

c++

-1
推荐指数
1
解决办法
394
查看次数

标签 统计

c++ ×3

c ×1

c++11 ×1

mod ×1

modulo ×1

signedness ×1

size-type ×1