C语言中long与char类型有何区别?

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

char 类型

char 是 "character"(字符)的缩写,它的主要用途是存储单个字符。

c语言 long char
(图片来源网络,侵删)

核心特点

  1. 本质是整数:在 C 语言中,char 类型在底层本质上就是一个小整数,它通常占用 1 个字节(8 bits)的内存空间。
  2. 字符编码:它存储的是字符在字符编码表(如 ASCII 或 Unicode)中的整数值,在 ASCII 编码中:
    • 'A' 的整数值是 65。
    • 'a' 的整数值是 97。
    • '0' 的整数值是 48。
    • '\n' (换行符) 的整数值是 10。
  3. 三种变体:为了处理有符号和无符号数,以及国际化字符(如中文、日文),char 有三种形式:
    • char: 有符号字符,默认情况下,char 是有符号的,这意味着它可以存储 -128 到 127 之间的整数(或 0 到 255,具体取决于编译器实现,但现代编译器大多默认为有符号)。
    • unsigned char: 无符号字符,只能存储 0 到 255 之间的非负整数。
    • signed char: 明确的有符号字符,与 char 类似,但明确表示是有符号的,保证范围是 -128 到 127。

重要提示:当 char 用于存储字符时,它的符号性通常不重要,但当它被用作一个小的整数时,就需要特别注意是 signed 还是 unsigned

示例代码

#include <stdio.h>
int main() {
    // 1. 声明一个 char 变量
    char my_char = 'A';
    // 2. 使用 %c 打印字符
    printf("字符: %c\n", my_char); // 输出: 字符: A
    // 3. 使用 %d 打印其底层整数值
    printf("ASCII 值: %d\n", my_char); // 输出: ASCII 值: 65
    // 4. char 变量可以进行算术运算
    char lowercase_char = my_char + 32; // 'A' (65) + 32 = 97 ('a')
    printf("转换后: %c\n", lowercase_char); // 输出: 转换后: a
    // 5. 使用 unsigned char
    unsigned char uc = 255;
    printf("无符号 char 的最大值: %u\n", uc); // 输出: 无符号 char 的最大值: 255
    return 0;
}

long 类型

long 是 "long"(长的)的缩写,用于表示整数,它的设计初衷是为了提供比 int 更大的数值范围。

核心特点

  1. 表示整数long 只能存储整数,不能存储小数或字符。
  2. 更大的范围:它的主要特点是比 int 类型能表示的数值范围更大,它占用的内存空间至少为 4 个字节(32 bits),在现在的 64 位系统上通常是 8 个字节(64 bits)。
  3. 数值范围
    • long 是 4 字节(32位),其范围通常是 -2,147,483,648 到 2,147,483,647
    • long 是 8 字节(64位),其范围通常是 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
  4. 标准化的变体:为了更精确地控制大小,C 标准还定义了 long 的其他变体:
    • long int:与 long 完全相同,可以互换使用。
    • signed long:明确表示这是一个有符号的长整型,与 long 默认行为相同。
    • unsigned long:无符号长整型,只能存储非负数,范围是 02^size_of_long_in_bits - 1

重要提示long 的大小在不同系统、不同编译器上可能不同,这是 C 语言为了适应不同硬件平台而做的设计,如果你需要一个固定大小的整数,应该使用 <stdint.h> 头文件中定义的类型,int32_t (32位整数) 或 int64_t (64位整数)。

示例代码

#include <stdio.h>
int main() {
    // 1. 声明一个 long 变量
    long my_long = 123456789L; // 注意:L 或 l 后缀表示这是一个 long 常量
    // 2. 打印 long 的值
    printf("long 变量的值: %ld\n", my_long); // 输出: long 变量的值: 123456789
                                       // %ld 是 long 的格式说明符
    // 3. 打印 long 的大小(单位:字节)
    printf("long 类型的大小: %zu 字节\n", sizeof(my_long)); // 输出通常是 4 或 8
    // 4. 使用 unsigned long
    unsigned long ul = 4294967295UL; // UL 后缀表示 unsigned long 常量
    printf("无符号 long 的值: %lu\n", ul); // %lu 是 unsigned long 的格式说明符
    // 5. long 可以存储非常大的整数
    long big_number = 9223372036854775807L;
    printf("一个很大的 long 数: %ld\n", big_number);
    return 0;
}

longchar 的核心区别总结

特性 char long
主要用途 存储单个字符 存储大范围的整数
数据类型 字符型 整型
大小 固定为 1 字节 (8 bits) 不固定,至少 4 字节,通常是 8 字节
数值范围 有符号: -128 到 127
无符号: 0 到 255
取决于大小:
32位: -2^31 到 2^31-1
64位: -2^63 到 2^63-1
格式化输出 %c (字符), %d (整数) %ld (long), %lu (unsigned long)
后缀 无 (字符常量用单引号 'A')
整数常量可用 L/l (如 65L)
Ll (如 123L)
ULul (无符号)

一个容易混淆的点:long char

你可能会问,long char 是什么类型?

c语言 long char
(图片来源网络,侵删)

答案是:C 语言标准中没有 long char 这个类型。

这是一个常见的误解,你可能想表达的是:

  • longchar 是两种独立类型,不能组合成 long char
  • 或者你想表达的是一个 long 类型的整数,它恰好对应一个字符的编码值。
    long char_code = 65L; // 这是一个 long 类型的变量,存储了字符 'A' 的编码值
    char my_char = (char)char_code; // 将 long 强制转换为 char,得到 'A'

    这里,char_codelong 类型,my_char 才是 char 类型。

  • char 来处理字符'a', '1', )或小范围的整数(0-255)。
  • long 来处理可能超出 int 范围的大整数
  • char 本质上是 1 字节的整数,而 long 是大小不固定的整数。
  • long char 是无效的语法,请将它们视为两个独立的概念。
c语言 long char
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
C语言中printf和s有何关联?
« 上一篇 今天
dede如何查询栏目的子类?
下一篇 » 今天

相关文章

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

目录[+]