当前位置: 首页 > ai >正文

数据类型全解析

目录

一、字符型 (Character Types)

二、整型 (Integer Types)

短整型 (Short Integer)

标准整型 (Integer)

长整型 (Long Integer)

超长整型 (Long Long Integer) - C99引入

三、浮点型 (Floating-Point Types)

四、布尔类型 (Boolean Type)

布尔类型使用说明:

标准库定义:

代码示例:

注意:

五、各种数据类型的长度

sizeof 操作符

基本语法

重要特性

关于 size_t 类型

示例代码

基本数据类型长度

sizeof 不计算表达式

原理说明:


C语言提供了丰富的数据类型用于描述现实世界中的各类数据:

  • 整型用于表示整数
  • 字符型用于处理字符
  • 浮点型则用于存储小数

数据类型本质上是一类相似数据的共同特征。编译器需要明确数据类型才能正确执行相关操作。

接下来我们将系统梳理C语言中的数据类型体系,本章重点讨论内置数据类型。

一、字符型 (Character Types)

  • char // 基础字符类型

  • signed char // 有符号字符型,范围通常为 -128 到 127

  • unsigned char // 无符号字符型,范围通常为 0 到 255


二、整型 (Integer Types)

短整型 (Short Integer)

  • short [int]

  • signed short [int] // 有符号短整型

  • unsigned short [int] // 无符号短整型

标准整型 (Integer)

  • int

  • signed int // 有符号整型

  • unsigned int // 无符号整型

长整型 (Long Integer)

  • long [int]

  • signed long [int] // 有符号长整型

  • unsigned long [int] // 无符号长整型

超长整型 (Long Long Integer) - C99引入

  • long long [int]

  • signed long long [int] // 有符号超长整型

  • unsigned long long [int] // 无符号超长整型


三、浮点型 (Floating-Point Types)

  • float // 单精度浮点型

  • double // 双精度浮点型

  • long double // 扩展精度浮点型


四、布尔类型 (Boolean Type)

        C语言最初没有专门的布尔类型,而是使用整数0表示假,非零值表示真。C99标准引入了专门的布尔类型。

布尔类型使用说明:

  1. 基本类型:_Bool

  2. 需要包含头文件:<stdbool.h>

  3. 取值:

    • true (真)

    • false (假)

标准库定义:

#define bool _Bool
#define false 0
#define true 1

代码示例:

#include <stdbool.h>
#include <stdio.h>int main() 
{_Bool flag = true; // 也可以使用 bool flag = true;if (flag) {printf("I like C\n");}return 0;
}

注意:

        在实际编程中,建议使用bool而不是直接使用_Bool,因为前者更具可读性且是标准推荐用法。


五、各种数据类型的长度

        每一种数据类型都有自己特定的长度,使用不同的数据类型可以创建不同长度的变量。变量长度的不同直接决定了其能够存储的数据范围。

sizeof 操作符

    sizeof 是C语言中的一个关键字,同时也是一种操作符,专门用于计算其操作数的类型长度,单位是字节。

基本语法

sizeof 操作符的操作数可以是:类型、变量、表达式

语法形式:

sizeof(类型)
sizeof 表达式

当操作数不是类型而是表达式时,可以省略后面的括号。

重要特性

  1. sizeof 后面的表达式不会真实参与运算,仅根据表达式的类型来确定大小

  2. sizeof 的计算结果是 size_t 类型

  3. sizeof 在编译期间就完成计算,不会在运行时执行表达式

关于 size_t 类型

        C语言规定 sizeof 的返回值是无符号整数,但没有规定具体类型,这由系统决定。不同系统中返回值可能是:

  • unsigned int(对应 printf 占位符 %u

  • unsigned long(对应 %lu

  • unsigned long long(对应 %llu

        为保证可移植性,C语言提供了 size_t 类型别名来统一表示 sizeof 的返回值类型。在 printf 中应使用 %zd 格式说明符。

示例代码

#include <stdio.h>int main() 
{int a = 10;printf("%zd\n", sizeof(a));      // 变量printf("%zd\n", sizeof a);       // 括号可省略printf("%zd\n", sizeof(int));    // 类型printf("%zd\n", sizeof(3 + 3.5));// 表达式return 0;
}

基本数据类型长度

以下代码展示了各种基本数据类型在典型系统(VS2022 X64配置)中的长度:

#include <stdio.h>int main() 
{printf("%zd\n", sizeof(char));        // 1printf("%zd\n", sizeof(_Bool));       // 1printf("%zd\n", sizeof(short));      // 2printf("%zd\n", sizeof(int));        // 4printf("%zd\n", sizeof(long));       // 4printf("%zd\n", sizeof(long long));  // 8printf("%zd\n", sizeof(float));      // 4printf("%zd\n", sizeof(double));     // 8printf("%zd\n", sizeof(long double));// 8return 0;
}

在VS2022 X64配置下的输出:

sizeof 不计算表达式

sizeof 的一个重要特性是它不会实际计算表达式的内容,仅分析其类型:

#include <stdio.h>int main() 
{short s = 2;int b = 10;printf("%d\n", sizeof(s = b + 1));  // 只考虑s的类型,不执行赋值printf("s = %d\n", s);              // s的值仍为2return 0;
}

原理说明

    sizeof 在编译阶段就根据表达式的类型确定了结果,而表达式的执行是在程序运行时进行的。由于 sizeof 在编译阶段就已经处理完成,因此在运行时不会执行其中的表达式。

http://www.xdnf.cn/news/17450.html

相关文章:

  • PostgreSQL因为A/B switch以及group表过多导致WAL full的情况讨论
  • 冒泡排序实现以及优化
  • django基于Python的设计师作品平台的数据可视化系统设计与实现
  • 数字图像处理2——图像增强
  • Java设计模式之开闭原则介绍与说明
  • TypeScript中的type和interface的区别是什么?
  • 红楼梦文本数据分析
  • LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)
  • 前端开发的奇技淫巧 --- 持续更新中
  • 使用线性降维方法进行数据降维
  • 使用tcp ntrip 协议 接收数据报错 java.net.SocketException: Connection reset
  • MariaDB 数据库管理与web服务器
  • 变量详解:创建初始化与内存管理
  • 【数据结构入门】栈和队列的OJ题
  • Virtio 驱动关键结构体与函数详解
  • RabbitMQ面试精讲 Day 18:内存与磁盘优化配置
  • 01.【面试题】在SpringBoot中如何实现多数据源配置
  • UNet改进(31):基于Adaptive Attention的UNet设计与实践
  • 智慧社区(十一)——Spring Boot 实现 Excel 导出、上传与数据导入全流程详解
  • 【永磁同步电机数学模型全程推导】【7 转矩方程】
  • IntelliJ IDEA 2025.2 重磅发布
  • 移动端音频处理实践:59MB变声应用的技术实现分析
  • 【GPT入门】第43课 使用LlamaFactory微调Llama3
  • GitLab 零基础入门指南:从安装到项目管理全流程
  • 复杂项目即时通讯从android 5升级android x后遗症之解决 ANR: Input dispatching timed out 问题 -优雅草卓伊凡
  • Android Intent 解析
  • 绕过文件上传漏洞并利用文件包含漏洞获取系统信息的技术分析
  • GPT OSS深度解析:OpenAI时隔6年的开源模型,AI民主化的新里程碑?
  • ubuntu 安装内核模块驱动 DKMS 介绍
  • RL代码实践 02——策略迭代