我知道整数下溢和溢出是未定义的.
但是,鉴于C++最终编译为汇编,实际定义的行为是不是?
按位表示保持不变,整数格式保持不变0111..11总是会翻转到1000..00,同为下溢,那么为什么不考虑定义的行为?
关于汇编汇编,我是从我们在学校教授的基本程序集中得出的,但代码块给出了
int x = INT_MAX;
int y = x+1;
Run Code Online (Sandbox Code Playgroud)
编译成
00401326 movl $0x7fffffff,0x8(%esp)
0040132E mov 0x8(%esp),%eax
00401332 inc %eax
00401333 mov %eax,0xc(%esp)
Run Code Online (Sandbox Code Playgroud)
现在,无论x的值如何,总是会有inc或add指令?那么,未定义的行为出现在哪里?
在C++标准中,有符号整数的溢出是未定义的,正是因为不同的编译器,汇编器和平台可能会对它们进行不同的解释.
当您知道要运行的平台时,您可以推断出程序的行为,但是如果没有这些知识,就无法预测它的行为方式.
按位表示保持不变,整数格式保持不变
这根本不是真的.
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |