【发布时间】:2015-02-28 08:42:49
【问题描述】:
在下面的程序中,在“积分提升”和“通常的算术转换”之后,运算符- 的两个操作数仍然是unsigned long long。后来,C++11 标准说:
5.7.3 二元-运算符的结果是第二个操作数与第一个操作数相减所得的差。
该标准是否更详细地定义了减法的执行方式(或参考其他定义减法的文档)?
从较小的无符号整数中减去较大的无符号整数是否会产生未定义的行为,为什么?
在下面的示例程序中执行分配 c=a-b 是否保证 c 在所有(甚至理论上)符合 C++11 标准的可能机器架构上都是 -3,为什么?
int main()
{
unsigned long long a=2, b=5;
signed long long c=a-b;
}
【问题讨论】:
-
减法在无符号算术中完成,然后才转换为有符号。
-
无符号算术总是环绕 (mod 2^n)
标签: c++ unsigned signed subtraction