在"C的完整参考"一书中,提到char默认情况下是无符号的.
但我试图用GCC和Visual Studio验证这一点.它默认签名.
哪一个是正确的?
本文旨在用作关于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位计算机.)
有迹象表明询问的区别许多问题short,并int在C++整数类型,但实际上,当你选择short了int?
假设有一个从 0 到 100 计数的计数器,将计数器变量声明为uint16_t而不是uint8_t.
显然,如果我使用uint8_t我可以节省一些空间。在自然字长为 16 位的处理器上,我猜两者的访问时间是一样的。我想不出为什么我会使用uint16_tifuint8_t可以覆盖范围。