整数常量

指定整数常量

整数变量有不同的类型,整数常量也有默认类型和类型后缀。

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. 核心要点与正确写法

常量类型声明示例推荐输出格式符
int100%d
long100L%ld
long long123456789LL%lld
unsigned int100U%u
unsigned long999999999UL%lu
unsigned long long9460730472580800ULL%llu

修正最后一行输出:

printf("%llu\n", metersPerLightYear); // 正确输出无符号长长整型Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注