我知道(INT_MIN/-1)溢出,但(INT_MIN%-1)没有溢出.至少这是两个编译器中发生的事情,一个是前c ++ 11(VC++ 2010),另一个是后c ++ 11 GCC 4.8.1
int x = INT_MIN;
cout << x / -1 << endl;
cout << x % -1 << endl;
Run Code Online (Sandbox Code Playgroud)
得到:
-2147483648
0
Run Code Online (Sandbox Code Playgroud)
此行为标准是定义的还是实现定义的?还有其他任何情况下除法操作会溢出吗?并且是否存在模数运算符溢出的情况?
我知道标准如下:
整数文字的类型取决于其值和符号:
但是VC++怎么样?!它似乎将十进制,八进制和十六进制视为相同,并且小数也允许使用无符号类型.
类似下面的代码:
cout << typeid(4294967295).name() << endl;
cout << typeid(4294967296).name() << endl;
cout << typeid(0xffffffff).name() << endl;
cout << typeid(0x100000000).name() << endl;
Run Code Online (Sandbox Code Playgroud)
得到:
unsigned long
__int64
unsigned int
__int64
Run Code Online (Sandbox Code Playgroud)
这是预期的,为什么它与标准不同?
看起来WinDbg的默认值是以十六进制显示十进制和无符号整数的整数.有没有办法以十进制显示全部?
我尝试使用这里提到的n命令
它给了我语法错误:
:086> n[10]
^ Syntax error in 'n[10]'
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?