0x10000与int/short越界

将0x10000赋给一个int变量,在不同编译器中的结果

1、在VC6.0中:

 1 // 0x10000是否越界int.cpp :
 2 // 看看0x10000是否超了int,
 3 // 理论上1个char是8bit,就是0xFF;1个int是16bit,就是0xFFFF;所以0x10000应该是超的。
 4 
 5 //#include "stdafx.h"
 6 
 7 
 8 int main(int argc, char* argv[])
 9 {
10     int i=0x10000;
11     int ii=(int)0x10000;
12     short s=0x10000;
13     return 0;
14 }

通过调试发现,i与ii都是65536,s是0。

对于32位系统下安装的VC6,int是32位,short是16位,s是获取了0x10000的后16bit,得到结果为0x0000,即为0.

2、在IAR中,工程目标MCU为16位的MSP430F5418A:

3、在CCS中,MCU仍为MSP430F5418A: