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)代替。
热门推荐
农村宅基地都有哪些法律规定
老人要穿怎样的鞋?上海消保委实测50款鞋:并非越软越好
国乒特训曝光!孙颖莎王曼昱都输32岁退役帅哥,樊振东变瘦了
苹果电脑怎么用优盾
抽完血会犯困吗
抽血后需要补什么营养
布莱希特作品:挑战与创新的戏剧世界
醒酒的饮料有哪些 盘点最受欢迎的解酒饮料
沉迷AI聊天怎么办?
Windows 11:如何启用和禁用「文件资源管理器」缩略图预览
知识产权专利包括哪些?一文详解专利分类与申请流程
2025年浙江大学全国最新排名第5位,位列浙江省内大学排名第1名
深入理解存款保险知识及其测算方法
抑郁症早期信号识别与应对
阿布扎比今年可能会开通飞行出租车客运服务
失序时代的“因果”: 一位民国枭雄的“非正常死亡”
读懂新生儿的哭闹
借方和贷方是什么意思
感冒可以喝啤酒吗?看这里!
交易所与Web3钱包开发全解析:技术架构、核心模块与未来趋势
中国传统食物“馓子”背后流传千年的文化故事
【约会哈尔滨,冰雪暖世界】“民俗风情”之旅带您感受激情冰雪与多彩民俗
洛天依是什么人物
120国家急救日——关爱生命,“救”在身边
申请公积金贷款置换商业贷款需要满足什么条件
植物大战僵尸植物图鉴,策略与特性深度解析
《植物大战僵尸》通关秘籍:策略布局,智取僵尸大军!
《红楼梦》中,林黛玉和贾宝玉为什么不能在一起?
留学生回国之后一直被扣钱?电话、水电、银行卡如何一键关闭?
小区停车费、卫生费由个人来收,合理吗?