short类型变量自动扩展为整数类型?

use*_*413 2 c

我想打印b [FFFC]的值,如下所示,

short var = 0xFFFC;
printf("%d\n", b[var]);
Run Code Online (Sandbox Code Playgroud)

但它实际上打印了b [FFFF FFFC]的值.

为什么会这样?

我的计算机由Windows XP以32位架构运行.

Ste*_*sop 7

short是签名类型.它的实现是16位.0xFFFC表示整数常量65,532,但转换为16位有符号值时,结果为-4.

因此,您的行将short var = 0xFFFC;var设置为-4(在您的实现上).

0xFFFFFFFC是-4的32位表示.所有发生的事情是您的值正在从一种类型转换为更大的类型,以便将其用作数组索引.它保留了它的值,即-4.

如果您确实想要访问数组的65,533rd元素,那么您应该:

  • 使用更大的类型var.int在32位Windows上就足够了,但通常size_t是一种无符号类型,它对于非负数组索引来说足够大.
  • 使用一个unsigned short,这只是为这个例子提供了足够的空间,但是如果你想再向前迈出4步就会出错.