我想知道这一点:当我尝试将整数值分配给int
变量(16 位编译器,整数 2 个字节)让我们说:
int a;
a=40000;
无法用将被截断的类型范围来表示。但我看到的是结果值a是 -25000(或某个接近的数字)的位模式,这意味着编译器为十进制 40000 选择的二进制表示形式是无符号整数表示形式。这就提出了我的问题:编译器如何选择这个文字表达式的类型?
我猜它使用能够处理所需存储空间较少的值的类型。
C89 和 C99 之间的行为有所不同。
在 C89 中,十进制整数文字采用可以表示的第一种类型:
int, long, unsigned long
在 C99 中,十进制整数文字采用可以表示的第一种类型:
int, long, long long
对于您的特定代码片段来说,这没有什么区别,因为 40000 保证适合 long,但 C89 和 C99 文字之间有一些显着差异。
其中一些后果描述如下:
http://www.hardtoc.com/archives/119 http://www.hardtoc.com/archives/119
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)