C++11是否保证余数的符号就是被除数的符号
Does C++11 guarantee that the sign of the remainder is the sign of the dividend?
是否保证在C++11中,(-x) % m
为负,等于(-x % m)
,其中x
和m
为正?
我知道这在我认识的所有机器上都是正确的。
除了Luchian的答案外,这是C++11标准的相应部分:
二进制/运算符产生商,二进制%运算符从第一个表达式除以第二如果/或%的第二个操作数为零,则行为为未定义。对于积分操作数,/运算符产生代数丢弃任何分数部分的商;如果商a/b是可在结果类型中表示,(a/b)*b+a%b等于a。
它漏掉了最后一句话。所以部分
(a/b)*b+a%b等于
是唯一可依赖的引用,这意味着给定/
的截断行为,a % b
将始终具有a
的符号。因此,如果您的实现在这方面遵循C++11标准,那么模运算的符号和值确实是为负操作数完美定义的。
5.6乘法运算符
4)二进制/运算符产生商,二进制%运算符从第一个的除法中得出余数第二个表达式。如果/或%的第二个操作数为零行为未定义;否则(a/b)*b+a%b等于a。如果两个操作数都是非负的,则余数是非负;如果不是,余数的符号是实现定义的(强调矿)
不过这是来自C++03。:(
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- VC++本机单元测试,找不到调试符号
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 检查TCHAR数组输入是否为带符号整数C++
- 用符号版本替换对函数的所有调用
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- C++11是否保证余数的符号就是被除数的符号