本文旨在用作关于C中隐式整数提升的常见问题解答,特别是由通常的算术转换和/或整数提升引起的隐式提升.
示例1)
为什么这会给出一个奇怪的大整数而不是255?
unsigned char x = 0;
unsigned char y = 1;
printf("%u\n", x - y);
Run Code Online (Sandbox Code Playgroud)
例2)
为什么这会给"-1大于0"?
unsigned int a = 1;
signed int b = -2;
if(a + b > 0)
puts("-1 is larger than 0");
Run Code Online (Sandbox Code Playgroud)
示例3)
为什么更改上例中的类型来short解决问题?
unsigned short a = 1;
signed short b = -2;
if(a + b > 0)
puts("-1 is larger than 0"); // will not print
Run Code Online (Sandbox Code Playgroud)
(这些示例适用于16位或短16位的32位或64位计算机.)
我试图找出C++标准是否指定了各种类型的大小之间的关系.例如,https : //stackoverflow.com/a/589599/1175080上的答案似乎声称:
sizeof(short int) <= sizeof(int) <= sizeof(long int)
Run Code Online (Sandbox Code Playgroud)
/sf/answers/41277911/的另一个答案有类似的说法:
sizeof(int) <= sizeof(long)
Run Code Online (Sandbox Code Playgroud)
我正在经历n3337.pdf(我相信C + 11标准的良好代理)但我找不到保证这些不等式的特定语言.
在n1256(C99)中,我可以在第5.2.4.2.1节中找到特定语言.整数类型的大小清楚地说明了每种类型的最小值和最大值,这些值间接地建立了大小之间的相对排序.
这些不等式是否在C++标准中类似地定义,还是直接从C继承?标准中的语言在哪里?