在c语言中 合法的长整型常数是

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

在C语言中,长整型常数是指一个整数值,它的类型被声明为 longlong long,这通常是为了表示超出普通 int 类型范围的数值。

在c语言中 合法的长整型常数是
(图片来源网络,侵删)

合法的长整型常数可以分为以下几种情况:


十进制长整型常数

这是最常见的形式,你只需要在普通的十进制整数后面加上后缀 lL 即可。

  • 后缀: lL (推荐使用大写的 L,因为小写的 l 容易被数字 1 混淆)。
  • 示例:
    • 123456789L // 一个合法的长整型常数
    • 42L // 合法
    • 0L // 合法
    • -98765L // 合法(负数)

八进制长整型常数

如果要以八进制(以0开头)表示一个长整型,需要在八进制数字后面加上 lL

  • 格式: 0 + 八进制数字 + lL
  • 示例:
    • 0777L // 合法,表示十进制的 511
    • 01234L // 合法,表示十进制的 668
    • 0L // 合法,表示十进制的 0

十六进制长整型常数

如果要以十六进制(以 0x0X 开头)表示一个长整型,需要在十六进制数字后面加上 lL

在c语言中 合法的长整型常数是
(图片来源网络,侵删)
  • 格式: 0x0X + 十六进制数字 + lL
  • 示例:
    • 0xFFFFL // 合法,表示十进制的 65535
    • 0xABC123L // 合法
    • 0XDEADBEEFL // 合法,注意 F 是十六进制数字,L 是后缀

long long 类型常数 (C99标准引入)

从C99标准开始,C语言引入了 long long 类型,它比 long 的范围更大,要表示 long long 类型的常数,需要使用 llLL 作为后缀。

  • 后缀: llLL (同样推荐大写)。
  • 示例:
    • 9223372036854775807LL // 合法,这是64位系统上 long long 的最大正值
    • -9223372036854775808LL // 合法,这是64位系统上 long long 的最小负值
    • 0xFFFFFFFFFFFFFFFFULL // 合法,U 表示无符号,LL 表示长长整型

特殊情况:无符号长整型

你还可以同时使用 uU (无符号) 和 lL (长整型) 后缀。

  • 后缀: ul, uL, Ul, UL, lu, lU, Lu, LU
  • 示例:
    • 123456UL // 合法,无符号长整型
    • 0xFFFFFFFFUL // 合法,一个32位无符号长整型的最大值
    • 42LLU // 合法,无符号长长整型

总结表格

进制 格式示例 类型说明
十进制 123L, -456L long
八进制 0777L, 0123L long
十六进制 0xFFFFL, 0xABC123L long
长长整型 9223372036854775807LL long long
无符号长整型 123456UL, 0xFFFFFFFFUL unsigned long
无符号长长整型 18446744073709551615ULL unsigned long long

非法或容易出错的示例

  • 123l 合法,但非常不推荐,因为小写的 l 看起来很像数字 1,容易造成阅读和误解,强烈建议始终使用大写的 L
  • 123 不是长整型常数,它的类型取决于 intlong 的大小关系,在大多数现代系统上,intlong 都是32位的,123 会被当作 int 类型,如果这个值超出了 int 的范围,编译器会尝试将其提升为 long
  • 45L 非法.L 后缀只能用于整数。45 是一个浮点数,其后缀应该是 f (float), F (float), l (long double)。
  • 0xGHL 非法,十六进制数字只包含 0-9A-F (或 a-f)。G, H, L 是非法的十六进制字符。

为什么需要使用长整型常数?

当你需要一个很大的整数,并且担心它超出 int 类型的范围(通常是 -2,147,483,648 到 2,147,483,647)时,就应该使用长整型常数。

示例代码:

在c语言中 合法的长整型常数是
(图片来源网络,侵删)
#include <stdio.h>
int main() {
    // 普通整数,可能超出 int 范围
    // int a = 2147483648; // 在大多数系统上,这会导致编译警告或错误,因为2147483648 > INT_MAX
    // 正确的做法:使用长整型常数
    long b = 2147483648L; // 合法
    printf("b = %ld\n", b); // %ld 用于打印 long 类型
    // 使用 long long 处理更大的数
    long long c = 9223372036854775807LL;
    printf("c = %lld\n", c); // %lld 用于打印 long long 类型
    return 0;
}

注意:打印 long 类型时,格式化字符串应使用 %ld;打印 long long 类型时,应使用 %lld,如果使用错误的格式(比如用 %d 打印 long),会导致未定义行为,通常是打印错误的数值。

-- 展开阅读全文 --
头像
C语言编译器课程设计,如何实现核心编译原理?
« 上一篇 01-06
单片机c语言16进制转10进制
下一篇 » 01-07

相关文章

取消
微信二维码
支付宝二维码

目录[+]