带负值的模算子

带负值的模算子

为什么这些行动:

std::cout << (-7 % 3) << std::endl;std::cout << (7 % -3) << std::endl;

给出不同的结果?

-1
1


潇湘沐
浏览 344回答 3
3回答

红糖糍粑

这个标志在这种情况下(即当一个或两个操作数为负数时)是实现定义的。规范在第5.6/4节(C+03)中说,二进制/运算符产生商,二进制%运算符从第一个表达式除以第二个表达式得到余数。如果/或%的第二个操作数为零,则行为未定义;否则(a/b)*b+a%b等于a。如果没有,则剩余部分的标志是实现定义的。.就C+03而言,这就是语言所要说的。

LEATH

a % b在c+默认情况下:(-7/3) => -2-2 * 3 => -6so a%b => -1(7/-3) => -2-2 * -3 => 6so a%b => 1在python中:-7 % 3 => 27 % -3 => -2在c+到python中:(b + (a%b)) % b
打开App,查看更多内容
随时随地看视频慕课网APP