当您将负运算符与%一起使用时会发生什么情况。 例-3%2或3%-2c模数运算符
Q
c模数运算符
1
A
回答
2
在C89,C90和C++ 03标准仅要求(a/b)*b+a%b == a
为/
和%
运算符。
如果两个操作数都是非负的,那么余数是非负的; 如果不是,则余数的符号是实现定义
编辑:在C99负数将如果第一参数为负
+0
在C99中,结果与股息具有相同的符号 – Satish 2010-06-22 12:38:26
1
的%
操作者给出了用于整数除法的余数,从而(a/b) * b + (a % b)
返回总是等于a
(如果a/b
是可表示的;在二进制补码表示中,最大的负整数除以-1是不可表示的)。
这意味着%
的行为耦合到/
的行为。在C99之前,负操作数的舍入方向是实现定义的,这意味着负操作数的%
的结果也是实现定义的。在C99中,对于/
的舍入趋近于零(小数只是截断),这也修复了C99中的%
的行为。
2
在C99
-3%2=-1
3%-2=1
在C90
-3%2 or 3%-2
- >实现定义
0
在C99 A%B具有a的符号,很像在math.h中FMOD这往往是你想要什么:
unsigned mod10(int a)
{
int b = a % 10;
return b < 0 ? b + 10 : b;
}
1
相关问题
- 1. 模数运算符在C#
- 2. C壳模数运算符
- 3. C#模运算
- 4. C++运算符和参数
- 5. C++运算符 ''
- 6. 运算符[] [] C++
- 7. 模板化运算符()重载C++
- 8. 关于C++模板和运算符
- 9. C++模板类误差与运算符==
- 10. C++模糊运算符过载错误
- 11. Qt C++模运算符失败
- 12. 在C++模板中使用运算符
- 13. C++运算符重载=模板
- 14. C++模板类的运算符
- 15. 在C中实现模运算符作为函数C
- 16. 运算符不解析为运算符函数C++
- 17. 点运算符C++
- 18. C++ delete []运算符
- 19. C++ typeid运算符
- 20. C++ overload []运算符
- 21. C++ typeof运算符
- 22. 字符串运算符C++
- 23. C++运算符()括号 - 运算符类型()与类型运算符()
- 24. z3 C++ api模运算整数
- 25. 运算符重载VS模板函数
- 26. 模式匹配数字/运算符
- 27. Java模数运算符和PreIncrement - SCJA
- 28. 在C++中调用+ =运算符函数中的运算符+函数
- 29. 复数重载*运算符(C++)
- 30. C++数组运算符[]不允许?
刚刚试试? – Andrey 2010-06-22 12:31:27
@Andrey:尝试不会告诉你绝对语言真实与你所看到的依赖于实现的区别。 – 2010-06-22 12:36:57
正确的名称是“模数”或“余数”。 – lhf 2010-06-22 12:37:36