首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >c语言数据类型

c语言数据类型

作者头像
用户12004530
发布2026-01-23 14:45:08
发布2026-01-23 14:45:08
1810
举报

c语言中常见的数据类型

c语言中的数据类型有很多,大致分为“基本类型”,“构造类型”,“指针类型”,“空类型”

这次我们主要讲基本类型

整型

整型(整数类型)用于存储整数数值,根据长度(占用字节数)和符号性(是否能表示负数)分为多种类型。不同类型的核心区别在于表示范围(能存储的整数大小范围),这由其占用的二进制位数和符号性决定。而整型又分为有符号整型和无符号整型,本质上是为了适应不同的数据场景

有符号整型

这里需要一个相应的头文件<limits.h>,专门用于整数类型,而头文件定义了宏常量,来表示不同符号类型的最大值和最小值,不同类型的宏常量在代码中展示(宏常量均为大写!!!)

1.signed short int(短整型)

简写形式:short 或 signed short(signed 和 int 均可省略),占位符"%hd"。

  • 长度:C 标准规定最小为 16 位(2 字节),几乎所有平台均实现为 2 字节。
  • 表示范围:16 位时为 −215 ~ 215−1,即 -32768 ~ 32767。
  • 用途:存储较小的整数(如温度、短距离等),比 int 更节省内存。

2. signed int(基本整型)

  • 简写形式:int 或 signed(signed 和 int 可省略其一,最常用 int)占位符"%d"。
  • 长度:C 标准规定最小为 16 位,现代平台(32 位 / 64 位)通常为 4 字节(32 位)。
  • 表示范围:32 位时为 −231 ~ 231−1,即 -2147483648 ~ 2147483647(约 ±21 亿)。
  • 用途:最常用的有符号整型,适用于大多数需要表示正负的场景(如计数器、坐标、盈亏数值等)。

3. signed long int(长整型)

  • 简写形式:long 或 signed long(signed 和 int 可省略)占位符"%ld"。
  • 长度:C 标准规定长度不小于 int,平台相关:32 位系统通常为 4 字节(32 位),64 位系统通常为 8 字节(64 位)。
  • 表示范围:
    • 32 位时:同 int(-2147483648 ~ 2147483647);
    • 64 位时:−263 ~ 263−1,即 -9223372036854775808 ~ 9223372036854775807(约 ±9e18)。
  • 用途:存储比 int 更大的正负整数(需注意平台差异)。

4. signed long long int(超长整型)

  • 简写形式:long long 或 signed long long(C99 标准引入,signed 和 int 可省略),占位符"%lld"。
  • 长度:C 标准规定最小为 64 位,现代平台均实现为 8 字节(64 位),跨平台稳定性高。
  • 表示范围:64 位时为 −263 ~ 263−1,即同 64 位 long(约 ±9e18)。

用途:存储极大的正负整数(如大整数运算、毫秒级时间戳等超过 int 范围的场景)。

代码语言:javascript
复制
#include <stdio.h>
#include <limits.h>
int main()
{
	printf("         short                  %d  %d\n", SHRT_MIN, SHRT_MAX);
	printf("         int                    %d  %d\n", INT_MIN, INT_MAX);
	printf("              long              %ld   %ld\n", LONG_MIN, LONG_MAX);
	printf("         long long              %lld   %lld\n", LLONG_MIN, LLONG_MAX);

	return 0;
}
无符号整型

1. unsigned short int(无符号短整型)

  • 全称:unsigned short int
  • 简写形式:unsigned short(int 可省略,更常用)占位符"%hu"。
  • 长度:C 标准规定最小为 16 位(2 字节),几乎所有平台均实现为 2 字节。
  • 表示范围:16 位无符号类型的范围为 0 ~ \(2^{16}-1\),即 0 ~ 65535(无符号类型最小值恒为 0)。
  • 用途:存储较小的非负整数(如小范围计数、设备状态码等),比 unsigned int 更节省内存。

2. unsigned int(无符号基本整型)

  • 全称:unsigned int
  • 简写形式:unsigned(int 可省略,最常用)占位符"%u"。
  • 长度:C 标准规定最小为 16 位,现代平台(32 位 / 64 位)通常为 4 字节(32 位)。
  • 表示范围:32 位无符号类型的范围为 0 ~ \(2^{32}-1\),即 0 ~ 4294967295(约 43 亿)。
  • 用途:最常用的无符号整型,适用于大多数非负场景(如数组下标、计数(用户数量、文件大小)、哈希值等)。

3. unsigned long int(无符号长整型)

  • 全称:unsigned long int
  • 简写形式:unsigned long(int 可省略)占位符"%lu"。
  • 长度:C 标准规定长度不小于 unsigned int,平台相关:32 位系统通常为 4 字节(32 位),64 位系统通常为 8 字节(64 位)。
  • 表示范围:
    • 32 位时:0 ~ \(2^{32}-1\)(同 unsigned int,0~4294967295);
    • 64 位时:0 ~ \(2^{64}-1\),即 0 ~ 18446744073709551615(约 1.8e19)。
  • 用途:存储比 unsigned int 更大的非负整数(需注意平台差异),如大文件大小、硬件地址等。

4. unsigned long long int(无符号超长整型)

  • 全称:unsigned long long int
  • 简写形式:unsigned long long(C99 标准引入,int 可省略)占位符"%llu"。
  • 长度:C 标准规定最小为 64 位,现代平台均实现为 8 字节(64 位),跨平台稳定性高。
  • 表示范围:64 位无符号类型的范围为 0 ~ \(2^{64}-1\),即同 64 位 unsigned long(0~1.8e19)。
  • 用途:存储极大的非负整数(如超大计数、UUID、64 位标识符等超过 unsigned int 范围的场景)。
代码语言:javascript
复制
#include <stdio.h>
#include <limits.h>
int main()
{

	printf("unsigned short                  0  %u\n", USHRT_MAX);
	printf("unsigned int                    0  %u\n", UINT_MAX);
	printf("unsigned long                   0  %lu\n", ULONG_MAX);
	printf("unsigned long long              0  %llu\n", ULLONG_MAX);
	return 0;
}

浮点型

浮点型(Floating-Point Types) 用于存储带小数部分的数值(如 3.14、-0.001、100.5 等),也可表示极大或极小的整数(超出整型范围的数,如 1e30)。与整型不同,浮点型的核心特点是能表示小数,但精度有限(无法精确表示所有实数)。浮点型分为单精度浮点型、双精度浮点型和扩展精度浮点型,(最常用的是单精度和双精度)

单精度浮点型

需要有对应的头文件<float.h>和宏常量

float(单精度浮点型)的核心特性:占位符"%f"

  1. 存储长度:通常为 4 字节(32 位),遵循IEEE 754 标准,内部由三部分组成:
    • 1 位符号位(0 表示正数,1 表示负数);
    • 8 位指数位(用于表示科学计数法中的指数);
    • 23 位尾数位(用于表示科学计数法中的有效数字,即尾数)。
  2. 精度:有效数字位数约为 6~7 位(即小数点前后总共能精确表示 6~7 位数字)。例如,float 存储 3.141592653 时,可能只能精确到 3.141593(第 7 位后产生误差)。
  3. 表示范围:能表示的数值范围约为:
    • 正数:\(\pm 1.17549435 \times 10^{-38}\)(最小值)~ \(\pm 3.40282347 \times 10^{38}\)(最大值);
    • 负数范围与正数对称(因符号位控制正负)。
代码语言:javascript
复制
#include <stdio.h>
#include <float.h>
int main()
{
	printf("float:        最小正值:%e,最大值:%e\n", FLT_MIN, FLT_MAX);
	return 0;
}
双精度浮点型

double(双精度浮点型)的核心特性:占位符"%lf"

  1. 存储长度与结构:通常为 8 字节(64 位),遵循IEEE 754 标准,内部结构分为三部分:
    • 1 位符号位(0 表示正数,1 表示负数);
    • 11 位指数位(用于表示科学计数法中的指数,范围比float的 8 位指数位更大);
    • 52 位尾数位(用于表示有效数字,长度远长于float的 23 位,因此精度更高)。
  2. 精度:有效数字位数约为 15~17 位(小数点前后总共能精确表示 15~17 位数字),远高于float的 6~7 位。例如,double 存储 3.141592653589793 时,能精确到更多位数,误差远小于float。
  3. 表示范围:能表示的数值范围远大于float,约为:
    • 正数:\(\pm 2.2250738585072014 \times 10^{-308}\)(最小值)~ \(\pm 1.7976931348623157 \times 10^{308}\)(最大值);
    • 负数范围与正数对称(由符号位控制)。
代码语言:javascript
复制
#include <stdio.h>
#include <float.h>
int main()
{
	printf("double:       最小正值:%e,最大值:%e\n", DBL_MIN, DBL_MAX);
	return 0;
}
扩展精度浮点型

long double(扩展精度浮点型)的核心特性:占位符"%lf"

  1. 存储长度与结构:长度不固定,因编译器和系统而异,常见实现包括:
    • 8 字节:与 double 完全一致(部分编译器为兼容旧系统采用此设计);
    • 10 字节:采用 x87 浮点格式(80 位扩展精度,含 1 位符号位 + 15 位指数位 + 64 位尾数位);
    • 12 字节或 16 字节:部分编译器(如 GCC 在 64 位 Linux 系统)采用 16 字节(128 位),基于 IEEE 754-2008 标准的 “四精度” 或扩展格式。

无论长度如何,其结构仍遵循 “符号位 + 指数位 + 尾数位” 的科学计数法逻辑,仅位数比 double 更多(尤其是尾数位,直接影响精度)。

  1. 精度与范围:精度(有效数字位数)和范围随长度增加而提升:
    • 10 字节(80 位):有效数字约 18~19 位,范围远大于 double(指数位更多);
    • 16 字节(128 位):有效数字约 33~36 位,范围极宽(能表示更大或更小的数值)。
代码语言:javascript
复制
#include <stdio.h>
#include <float.h>
int main()
{
	printf("long double:  最小正值:%Le,最大值:%Le\n", LDBL_MIN, LDBL_MAX);
	return 0;
}
浮点型的输出

在浮点型数据类型中,我们可以自定义数据的小数位数和整体最小位数

不管是单精度还是双精度,我们在%后面加上".n"表示小数位数为n位,在"%d"中间有n的时候,表示最低位数,比如"%4d"就是最低位数为4个,若输入的数字超出设置的位数大小,就原样输出,若输入的数字个数少于设置的最小位数时,就在左边补空格

当我们占位符是"%5.2f"或"%5.2lf",表示总共最低位数为5个数,小数为2个数且后一位小数会四舍五入,若总体字符数超出设置的最低字符数个数就在左边补空格,若输入的小数位数超出设置的小数位数,就在左边补0

字符型

字符型(Character Types) 本质上是一种特殊的1 字节整型(通常占用 8 位),主要用于存储字符(如字母、数字、符号等),但也可以表示整数(范围由符号性决定)

char(基本字符型)占位符"%c"

  • 全称:字符型(Character Type),是 C 语言中最基础的字符类型。
  • 长度:固定为 1 字节(8 位),C 标准强制规定(不同于整型的长度可能随平台变化)。

表示范围:

    • 若默认带符号(同signed char):-128 ~ 127;
    • 若默认无符号(同unsigned char):0 ~ 255。

最后一个初始化为65,为什么会输出字符A,因为占位符给的是%c,就要输出一个字符,而65所对应的ascll字符为大写字母A

有符号字符型

signed char,占位符"%c"

全称:带符号字符型(Signed Character Type)。

长度:1 字节(8 位),与char相同。

符号性:明确带符号(有符号位),最高位为符号位(0 表示非负,1 表示负)。

表示范围:-128 ~ 127(计算方式:\(-2^7\) ~ \(2^7 - 1\))。

代码语言:javascript
复制
#include <stdio.h>
#include <limits.h>
int main()
{
	printf("signed char                    0  %u\n", UCHAR_MAX);
	return 0;
}
无符号字符型

unsigned char,占位符"%c"

全称:无符号字符型(Unsigned Character Type)。

长度:1 字节(8 位),与char、signed char相同。

符号性:无符号(无符号位,所有 8 位均用于表示数值)。

表示范围:0 ~ 255(计算方式:0 ~ \(2^8 - 1\))。

代码语言:javascript
复制
#include <stdio.h>
#include <limits.h>
int main()
{
	printf("unsigned char                    0  %u\n", UCHAR_MAX);
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • c语言中常见的数据类型
    • 整型
      • 有符号整型
      • 无符号整型
    • 浮点型
      • 单精度浮点型
      • 双精度浮点型
      • 扩展精度浮点型
      • 浮点型的输出
    • 字符型
      • 有符号字符型
      • 无符号字符型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档