2、C 语言数据类型总结

发布于:2025-08-17 ⋅ 阅读:(22) ⋅ 点赞:(0)

涉及各类数据类型的定义、内存存储、格式控制符,到常量变量、输入函数、类型转换及可移植整型等方面

C 语言数据类型核心知识点总结

一、整型(int)

1. 基本概念

  • 定义:用于存储正整数、负整数和 0,关键字为int
  • 内存占用:典型尺寸为 4 字节(32 位),不同系统可能存在差异。
  • 取值范围:有符号整型(signed int)为 - 2147483648 至 2147483647;无符号整型(unsigned int)为 0 至 4294967295。

2. 变量定义与初始化

  • 语法:int 变量名 = 常量;(如int num = 100;)。
  • 注意:赋值时需保证常量与变量类型一致,否则可能出现类型错误或警告。

3. 内存存储方式

  • 有符号整型:首位为符号位(0 表示正数,1 表示负数),数据以补码形式存储。
    • 正数:原码、反码、补码一致(如 3 的补码为0000 0011)。
    • 负数:补码 = 绝对值的原码取反 + 1(如 - 3 的补码为1111 1101)。
  • 无符号整型:无符号位,所有位均用于表示数据。

4. 整型修饰符

修饰符

说明

典型尺寸

char

单字节整型(1 字节)

1 字节

short int

短整型,节省内存

2 字节

long int

长整型,扩大取值范围

4 或 8 字节

long long int

长长整型,更大取值范围

8 字节

unsigned

无符号,仅表示非负整数

-

5. 进制转换

  • 内存存储:所有数据在内存中均以二进制存储。
  • 表示方式:程序中可使用十进制(默认)、八进制(前缀 0)、十六进制(前缀 0x)。
  • 转换技巧:先转为二进制,再按目标进制分组(如二进制转八进制每 3 位一组,转十六进制每 4 位一组)。

6. 格式控制符

控制符

说明

%d

有符号 int 型

%hd

有符号 short 型

%ld

有符号 long 型

%lld

有符号 long long 型

%u

无符号 int 型

%hu

无符号 short 型

%lu

无符号 long 型

%llu

无符号 long long 型

二、浮点型(float、double)

1. 基本概念

  • 定义:用于存储小数,分为单精度(float)、双精度(double)和长双精度(long double)。
  • 内存占用:float 为 4 字节,double 为 8 字节,long double 为 16 字节。
  • 精度:占用内存越多,精度越高。

2. 内存存储(IEEE754 标准)

  • 公式(-1)^S * M * 2^E(S 为符号位,M 为有效数字,E 为指数位)。
  • 单精度(32 位):1 位符号位 + 8 位指数位 + 23 位有效数字。
  • 双精度(64 位):1 位符号位 + 11 位指数位 + 52 位有效数字。

3. 格式控制符

控制符

说明

%f

单精度浮点型

%lf

双精度浮点型

%Lf

长双精度浮点型

%x.yf

右对齐,占 x 宽度,保留 y 位小数

三、字符型(char)

1. 基本概念

  • 定义:用于存储字符,本质是 1 字节的整型,关键字为char
  • 表示方式:字符常量用单引号括住(如'a''\n')。

2. 内存存储

  • 字符以 ASCII 码值存储(0-127),可通过 man 手册或在线文档查询对应关系。
  • 示例:'A'的 ASCII 码为 65,在内存中存储为0100 0001

3. 格式控制符

控制符

说明

%c

单个字符显示

%o

八进制表示

%x

十六进制表示(小写)

%#o

带 0 前缀的八进制

%#X

带 0X 前缀的十六进制

四、字符串型(character string)

1. 基本概念

  • 定义:由多个字符组成,以'\0'作为结束标志(隐藏在末尾)。

2. 内存存储

  • 字符数组char buf[16] = "shijie";,存储在栈区,可修改。
  • 字符指针char *p1 = "shijie";,指向常量区,不可修改。
  • 长度计算sizeof()包含'\0'strlen()不包含'\0'

3. 格式控制符

控制符

说明

%s

字符串输出

%-10s

左对齐,占 10 宽度

%10s

右对齐,占 10 宽度

五、布尔类型(bool)

  • 定义:表示真(非零)或假(0),需包含头文件#include <stdbool.h>
  • 应用:常用于逻辑判断和循环控制。

六、常量和变量

1. 常量

  • 定义:不可改变的量,包括整型、浮点型、字符型、字符串型等。
  • 示例100(int)、3.14(double)、'a'(char)、"nihao"(字符串)。

2. 变量

  • 定义:可改变的量,需指定数据类型。
  • 类型:int、float、char、字符串、bool 等,及它们的修饰拓展类型。

七、标准输入(stdin)

1. 相关函数

  • scanf():格式化输入函数,原型为int scanf(const char *format, ...)
    • 注意:输入格式需与格式控制符严格匹配,否则数据可能遗留缓冲区。
    • 返回值:成功读取的数据个数。
  • getchar():从键盘读取一个字符,常用于清空输入缓冲区。

2. 输入缓冲区处理

  • 若输入格式错误,数据会遗留缓冲区,需用while(getchar()!='\n');清空。
  • 示例:scanf("%d", &num);后需清空缓冲区,避免影响后续输入。

八、数据类型的本质与类型转换

1. 本质

  • 数据类型是对内存解释方式的约定,不同类型对应不同的内存解读规则。

2. 类型转换

  • 隐式转换:系统自动进行,从小类型到大类型(如 char→int→float),避免精度丢失。
  • 强制转换:用户显式转换,格式为(目标类型)变量(如(int)3.14),可能导致精度损失。

九、可移植整型

1. 问题背景

  • 标准整型在不同系统中尺寸可能不同,影响代码移植性。

2. 解决方案

  • 使用typedef定义固定尺寸的整型,如:

typedef signed char int8_t;

typedef unsigned int uint32_t;

  • 优势:移植性强、可读性高、节省内存。

3. 常用可移植类型

类型

说明

int8_t

8 位有符号整型

int16_t

16 位有符号整型

int32_t

32 位有符号整型

int64_t

64 位有符号整型

uint8_t

8 位无符号整型

uint16_t

16 位无符号整型

uint32_t

32 位无符号整型

uint64_t

64 位无符号整型


网站公告

今日签到

点亮在社区的每一天
去签到