C语言的数据类型详解:整形int、字符型char、浮点型float、double
创作时间:
作者:
@小白创作中心
C语言的数据类型详解:整形int、字符型char、浮点型float、double
引用
CSDN
1.
https://blog.csdn.net/Siri_s12/article/details/143997006
C语言的数据类型是编程中的基础概念,包括整形、字符型、浮点型和布尔型等。本文将详细介绍这些数据类型的定义、取值范围以及使用场景,并且还会介绍signed和unsigned关键字的使用方法。此外,文章还会提到sizeof操作符的使用和返回类型,以及如何查询数据类型的取值范围。
一、计算机数据存储和处理的基本单位
- 位(bit):计算机中最小的数据单位,只能表示0或1
- 字节(Byte):由8位组成,是计算机处理数据的基本单位
- 千字节(KB, Kilobyte):1KB等于1024字节,因为计算机使用二进制,所以1024(2^10)是1KB
- 兆字节(MB, Megabyte):1MB等于1024KB,也就是1024 * 1024字节
- 吉字节(GB, Gigabyte):1GB等于1024MB ,也就是1024 * 1024 * 1024字节
- 太字节(TB, Terabyte):1TB等于1024GB,也就是1024 * 1024 * 1024* 1024字节
- 拍字节(PB, Petabyte):1PB等于1024TB
- 在编程中,字节是定义数据类型和内存分配的基础
二、signed 和 unsigned
- C 语⾔引⼊
signed和unsigned关键字来修饰char、short、int、long等整型家族的类型。 - 使用
signed关键字,表示一个类型带有正负号,包含负值 - 使用
unsigned关键字,表示该类型不带有正负号,只能表示零和正整数
三、 数据类型介绍
- “类型”指的是相似数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
- “整数类型”用来描述整数,比如 1、2、3
- “字符类型”用来描述字符,比如 'a'、'b'、'c'、"asdfg"
- “浮点型类型”用来描述小数,比如 1.1、3.14
1.字符型
(1)char类型
char = character意思是 字符char类型通常用于存储单个字符,例如 字母、数字、符号char类型通常占用 1个字节(8位),这个大小是由编译器和机器架构决定。- ASCII 编码中,
char可以表示数值范围是从 0 到 127(在8位系统中)
(2) signed char 和 unsigned char
signed char可以表示的数值范围是从 -128 到 127(在8位系统中)char = signed char,在C语言,如果不特别指定, char 默认是有符号的。这意味着如果你只是声明 char 而没有指定 signed 或 unsigned ,它将被当作 signed charunsigned char可以表示的数值范围是从 0 到 255(在8位系统中)。
2.整型
(1)整形类型的主要区别
- 有符号(signed)可以表示正数和负数
- 无符号(unsigned)只能表示非负数,因此数值范围的上限是相应有符号类型的两倍
int = signed int,int 类型,默认是带有正负号的,也就是说 int 等同于 signed int ,短整型、整形、长整形、更⻓的整型 也是如此- 大小 (具体范围不需要背蛤,了解一下就好):
short int通常为16位int通常为32位long int可能是32位或64位long long int通常为64位
具体的数值范围和位数可能会因为不同的编译器和系统架构而有所不同。
(2)整型
- 三种:int、signed int、unsigned int
int = signed int有符号的整型,是最常用的整数类型,通常为32位,数值范围取决于具体的编译器和系统架构,但通常是 -2147483648到2147483647unsigned int无符号的整型,数值范围为 0到4294967295
(3)短整型
- 三种:short int、signed short int、unsigned short int
short int = signed short int有符号的短整型,可以存储的数值范围较小,通常为 -32768到32767(16位)unsigned short int无符号的短整型,只能存储非负数,数值范围通常为 0到65535(16位)
(4)长整形
- 三种:long int、signed long int、unsigned long int
long int = signed long in和unsigned long int的取值范围确实取决于具体的编译器和系统架构- 有符号的长整型(signed long int):
- 在32位系统中,
long int = signed long in通常是32位的,数值范围通常为 -2147483648到2147483647 - 在64位系统中,
long int = signed long in可能是64位的,数值范围通常为 -9223372036854775808到9223372036854775807 - 无符号的长整型(unsigned long int):
- 在32位系统中,
unsigned long int通常是32位的,数值范围通常 0到4294967295 - 在64位系统中,
unsigned long int可能是64位的,数值范围通常 0到 18446744073709551615
(5)更长整形
- 三种(C99中引⼊):long long int、signed long long int、unsigned long long int
long long int = [signed] long long int有符号的更长整型,通常为64位,数值范围为 -9223372036854775808到9223372036854775807unsigned long long int无符号的更长整型,数值范围为 0到18446744073709551615。
3.浮点型
float单精度浮点型double双精度浮点型long double精度更长的浮点型
4.布尔类型
(1)在C语言中
- 0表示假
- 非0表示真
(2)_Bool
- 在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的
_Bool - 布尔类型的使⽤得包含头⽂件
<stdbool.h> - 布尔类型变量的取值是:
true或者false
(3)_Bool 的其他写法
_Bool写成bool这样也没问题#define bool _Bool#define false 0#define true 1
四、各种数据类型的取值范围
1. sizeof 操作符
sizeof是 C 语⾔提供的⼀个 运算符(操作符) ,也是⼀个 关键字
(1) sizeof 的使用形式
sizeof返回某种数据类型或某个值占⽤的字节数量,它的参数可以是 数据类型 的关键字,也可以是 变量名 或 某个具体的值sizeof不仅仅可以计算内置的类型的⼤⼩,计算 数组 、 ⾃定义类型 的⼤⼩都是可以的- 语法:
sizeof(type) - 整型类型的变量是4个字节,直接使⽤整型类型也是4个字节
- sizeof 的括号中如果给的不是类型的话,括号可以省略的
(2) 计算各数据类型的长度
- C语言标准:
sizeof(long)>=sizeof(int)sizeof(long double)>=sizeof(double)
(其他的同理)
(3) sizeof 中的表达式不计算
sizeof在代码进行编译的时候,就 根据表达式的类型确定了,而表达式的执行要在程序运行期间执行,在编译期间已经将sizeof处理掉了,所以在运行期间就不会执行表达式了
(4) sizeof 的返回类型(这里涉及占位符知识,博主下个帖子会说到)
- sizeof 运算符的返回值,C 语⾔只规定是⽆符号整数,并没有规定具体的类型,不同的系统中,返回值的类型有可能是 unsigned int ,也有可能是 unsigned long ,甚⾄是 unsigned long long ,对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。
- C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的 返回值类型 。该别名定义在 stddef.h 头⽂件(引⼊ stdio.h 时会⾃动引⼊)⾥⾯,对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是 unsigned long 。
- 注:VS2022中 size_t 是定义在 vcruntime.h 中的,不同的编译器实现上略有差异的。
- C 语⾔还提供了⼀个常量 SIZE_MAX ,表⽰ size_t 可以表⽰的最⼤整数。所以, size_t 能够表⽰的整数范围为 [0, SIZE_MAX] 。
- printf() 有专⻔的占位符 %zd 或 %zu ,⽤来处理 size_t 类型的值。
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(int));
return 0;
}
上⾯代码中,不管 sizeof 返回值的类型是什么, %zd 占位符(或 %zu )都可以正确输出。如果当前系统 不⽀持 `%zd 或 %zu ,可使⽤ %u (unsigned int)或 %lu (unsigned long int)代替。
热门推荐
脓毒症:一种致命的全身性炎症反应综合征
自组装胶体纳米光子结构:生物标志物超灵敏、高通量检测的新兴工具
探究和珅的20条罪名叫什么及其法律启示
如何在减肥的同时保持头发健康
借钱应该写借条还是欠条
老同学欠钱4年不还?法院强制执行促和解
探索无限可能的奇幻之旅 ——《奇异博士 2:疯狂多元宇宙》
探秘转世之命:命格与轮回的奥秘
梅艳芳经典电影盘点:五部代表作见证“百变天后”的艺术人生
如何向人工智能精准提问
幕墙VS窗墙:结构差异与设计美学
结膜色素痣形成原因是什么
企业遭遇行政处罚,信用修复怎么办?
什么是大气污染?这些知识你得了解!
实用标准!制氢加氢一体站安全技术规范(附下载)
身份证办理进度查询全攻略:线上平台、移动端工具和线下渠道一文详解
粪类圆线虫病:病因、症状、诊断与治疗全解析
川渝174家公共图书馆实现纸质文献通借通还
Oracle数据库中查看表数据修改时间和日期的三种方法
手机拍照不会调白平衡?1分钟学会,让你的照片更出彩!
小区物业收费需要哪些部门审批手续?
【稳定电源构建秘诀】:5V稳压电路设计要点全解析(实用指南)
稳压芯片的选型与应用技巧,助力电路设计优化
自己交社保交哪个档次好啊?附具体演算过程!
如何改善腿型,让腿变直
X型腿的成因与矫正方法,助你拥有健康美腿的指南
PCB漏电失效案例分析
什么是Transformer模型?
散热风扇运行故障是否可以通过监控来预防
依靠集体智慧力量才能建好连队带好队伍