我知道整数下溢和上溢是未定义的。
然而,考虑到C++最终编译成汇编语言,行为实际上是被定义的吗?
位表示保持不变,整数格式仍然是0111..11总会翻转到1000..00,下溢也是一样,那么为什么它不被认为是定义好的行为呢?
关于汇编编译,我从我们在学校学到的基础汇编中推导出来,但代码块能够给出更多信息。
编译成
然而,考虑到C++最终编译成汇编语言,行为实际上是被定义的吗?
位表示保持不变,整数格式仍然是0111..11总会翻转到1000..00,下溢也是一样,那么为什么它不被认为是定义好的行为呢?
关于汇编编译,我从我们在学校学到的基础汇编中推导出来,但代码块能够给出更多信息。
int x = INT_MAX;
int y = x+1;
编译成
00401326 movl $0x7fffffff,0x8(%esp)
0040132E mov 0x8(%esp),%eax
00401332 inc %eax
00401333 mov %eax,0xc(%esp)
现在,无论x的值是多少,都会有一个inc或add指令,那么未定义行为从哪里产生?