指定整数常量
整数变量有不同的类型,整数常量也有默认类型和类型后缀。
1. 默认类型与基础后缀
- 普通整数常量(如
100)默认类型是int。 - 若希望指定为
long类型,需在数值后加L或l(推荐大写L,小写l易与数字1混淆)。 - 指定为
long long类型,需加LL或ll。
2. 无符号与负值常量
- 负整数常量通过一元减号运算符定义(如
-4、-100000L)。 - 指定为无符号类型需加
U或u,可结合长度后缀(如100U、999999999UL)。 - 极大范围的无符号整数使用
ULL(如9460730472580800ULL对应unsigned long long)。
3. 代码示例与输出现象
#include <stdio.h>
int main(void)
{
printf("%d\n",100);
printf("%d\n",100L);
long Big_Number = 12154541L;
printf("%d\n",Big_Number);
int decrease = -4;
long below_sea_level = -100000L;
long long really_big_number = 123456789LL;
unsigned int count = 100U;
unsigned long value = 999999999UL;
unsigned long long metersPerLightYear = 9460730472580800ULL;
printf("%d\n",metersPerLightYear);
return 0;
}Code language: PHP (php)
运行输出结果:
100
100
12154541
-148748608
4. 输出结果解析
- 前三个输出(
100、100、12154541)符合预期。 - 第四个输出
-148748608是格式符误用导致的异常结果:- 变量
metersPerLightYear是unsigned long long类型,且值极大(约 9.46e15)。 - 代码中使用了
%d(专用于int有符号整型,仅读取 4 字节)来输出它。 - 实际传入的是 8 字节数据,被截断并按有符号 32 位补码解析,从而得出错误的负数。
- 变量
5. 核心要点与正确写法
| 常量类型 | 声明示例 | 推荐输出格式符 |
|---|---|---|
int | 100 | %d |
long | 100L | %ld |
long long | 123456789LL | %lld |
unsigned int | 100U | %u |
unsigned long | 999999999UL | %lu |
unsigned long long | 9460730472580800ULL | %llu |
修正最后一行输出:
printf("%llu\n", metersPerLightYear); // 正确输出无符号长长整型Code language: JavaScript (javascript)