提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
学习内容梳理。
C语言中的基本数据类型
1.单位
谈基本数据类型之前,首先需要了解一下计算机的存储单位。
首先,计算机由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。因此,计算机内部采用二进制存储信息。一个 二进制位包含的信息量称为比特(Bit)、比特就是组成信息的最小单位。
接下来由小到大谈一谈其他的存储单位。
1Byte=8Bit 表示范围 :2^n(n代表比特位数),也就是0~255个无符号整数 or -128~127个有符号整数
1KB=1024Byte
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
用通俗易懂的方式解释1字节(Byte)的表示范围,观察下方八位二进制数字(由低位往高位看,1个比特位代表1位2进制数),上方是00000000,下方是00000001,表示两种状态。由于每一位的状态都只有0或者1,根据排列组合-> 1位二进制数共有两种状态、2位二进制数有4种状态、3位共8种状态、以此类题,8位二进制数就有2^8种状态,由于从0开始,那么其能表示的无符号数就是0~255啦。
00000000
00000001
2.基本数据类型
接下里说说数据类型,C语言中的基本数据类型有以下几类:
基本数据类型 大小 表示范围
char //字符数据类型 1Byte 0~2^8-1个无符号数
short //短整型 2Byte 0~2^16-1个无符号数
int //整形 4Byte 0~2^32-1个无符号数 C中整数默认为int型
long //长整型 4Byte 0~2^32-1个无符号数 (不同的系统和编译器的大小可能会是8Byte)
long long //更长的整形 8Byte 0~2^64-1个无符号数
float //单精度浮点型 4Byte 0~2^32-1个无符号数
double //双精度浮点型 8Byte 0~2^32-1个无符号数 C中浮点数默认为double型
对于整形变量(默认有符号),可以用unsigned(无符号数),signed(有符号数)来修饰。例如:
unsigned char a = 128;
我们还可以通过打印sizeof(类型名)
来得到数据类型的大小。例如:
#include<stdio.h>
int main()
{
printf("char的大小是%d个字节\n", sizeof(char));
printf("int的大小是%d个字节\n", sizeof(int));
printf("long的大小是%d个字节\n", sizeof(long));
printf("long long的大小是%d个字节\n", sizeof(long long));
printf("float的大小是%d个字节\n", sizeof(float));
printf("double的大小是%d个字节\n", sizeof(double));
return 0;
}
以上代码在32位VS2017中运行结果如图:
学过其他编程语言的朋友可能会发现,以上数据类型并没有提到字符串型(string),那么C语言中可以表示字符串吗?答案是可以的, C语言中通过 ->char 字符串名[]= "字符串内容"
来定义一个字符串。
3.为什么出现这么多的类型?
- 因为对于不同的对象,不同的数据类型更具有代表性。
- 因为各数据类型的大小和表示范围不同、给各个类型分到不同的空间,可以达到节约空间的目的。
- 便于计算机存储与处理。
4.printf()传参
printf在传入参数的时候如果是整形会默认传入四字节,由于printf是可变参数的函数,所以后面参数的类型是未知的,所以甭管你传入的是什么类型,printf只会根据类型的不同将用两种不同的长度存储。其中8字节的只有long long、float和double(注意float会处理成double再传入),其他类型都是4字节。所以虽然a + b的类型是char,实际接收时还是用一个四字节整数接收的。另外,读取时,%lld、%llx等整型方式和%f、%lf等浮点型方式读8字节,其他读4字节。
总结
以上就是我关于C语言基本数据类型总结的一些笔记,不足之处、欢迎补充指正!