一、前言
我们为什么要写代码呢?是为了希望计算机能够帮助解决我们生活中的问题。
我们希望方便沟通,就出现了微信;希望方便购物,就出现了淘宝;希望方便支付,就出现了支付宝……解决沟通、购物、支付等问题是不是需要一些数据呢?显然是需要的。
计算机最基本且最关键的功能便是存储并处理数据,微信、淘宝、支付宝等也是在处理数据之上建立起来的,我们为了能够方便处理生活中的各种各样的数据(比如价格、身高、体重、电话号码等等),就引出了数据类型这样的概念。
所以体验了第一个C语言程序后,我们首先需要了解的就是数据类型。
二、常见数据类型
char | 字符数据类型 |
short | 短整型 |
int | 整型 |
long | 长整型 |
long long | 更长的整型 |
float | 单精度浮点数 |
double | 双精度浮点数 |
以上就是我们C语言中常见的数据类型。我们通过以上的数据类型可以用来存储并处理数据。
比如:
int main()
{
int age = 10; // 整型
float price = 50.50; // 单精度浮点型
double weight = 55.5; // 双精度浮点型
return 0;
}
三、为什么会出现这么多的数据类型?
如果我们只用一种数据类型来存储所有的数据岂不是更好,为什么要建立这么多种数据类型来自取其扰呢?更有甚者,居然把整数又给细化分为短整型,整型,长整型以及更长的整形。
1.每种数据类型开辟的空间大小
为解答为什么会出现这么多的数据类型?我们首先来看一下每种数据类型所创建的空间在内存中所占的空间大小。如何计算每种类型所创建空间的大小呢?此时需要借助sizeof关键字来帮助。
int main()
{
printf("%d\n", sizeof(char)); // %d表示以十进制整数形式输出
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
我们看到终端输出的结果是:1 2 4 4 8 4 8。
那么这些数字是什么意思呢?指的是一头牛?一匹马?还是一座房子?实际上,它的单位是字节。sizeof()表示的是该数据类型所占存储空间的大小,单位是字节Byte。意思是说char数据类型开辟的存储空间是1个字节,int数据类型开辟的存储空间是4个字节……
①计算机中用于计量存储容量的计量单位
那么字节又是什么鬼呢?字节是计算机中用于计量存储容量的计量单位。
下面我再详细介绍一下计算机中用于计量存储容量的计量单位。
在我们计算机中,最小的单位是比特位(bit),再往上就是字节(Byte)【有一家公司叫做字节跳动Byte Dance,抖音、今日头条都是该公司旗下的产品】,接下来便是我们生活中常见的KB、MB、GB、TB、PB……
- 众所周知,计算机是一个硬件,需要通电,分为正电和负电,正好对应1/0二进制位,所以,我们计算机存储和处理的数据实质就是二进制数字,那么一个bit的空间我们可以存储一个二进制位(也就是1/0)。
- 1 Byte = 8 bit,也就是一个字节可以存放8个二进制数字,比如说01001011就是1个字节。
- 1 KB = Byte = 1024 Byte,1 MB = KB = 1024 KB,......,越往上也是如此,不再一一赘述。
- C语言规定,sizeof(long) sizeof(int),所以我们经常见到sizeof(long)为4或者8。
2.为了更加丰富的表达生活中的各种值
我们已然了解不同数据类型开辟的空间大小,那么开辟空间大小不同是为什么呢?
char | 字符数据类型 | 1 Byte |
short | 短整型 | 2 Byte |
int | 整型 | 4 Byte |
long | 长整型 | 4 Byte或8 Byte |
long long | 更长的整型 | 8 Byte |
float | 单精度浮点数 | 4 Byte |
double | 双精度浮点数 | 8 Byte |
我们以int举例:int类型所占的存储空间大小为 4 Byte,也就是 4 * 8 = 32 bit
00000000000000000000000000000000
00000000000000000000000000000001
00000000000000000000000000000010
00000000000000000000000000000011
......
1111 1111 1111 1111 1111 1111 1111 1111
这样,我们可以得知1个int类型可以表示种数字;同理,1个short类型(2 Byte)可以表示种数字,所以int表示的数值范围要比short要大。
由此可见,每种数据类型所占的存储空间不一样,表示的数值范围也不一样。
在我们早期的计算机中,存储空间很小,存储空间的使用是很珍贵的,能省则省,所以我们给数据分配合适的存储空间。就好比说人的年龄一般情况下不会超过200岁,若使用int类型处理全中国人的年龄就太浪费存储空间了。
类型越多,选择的种类就越多,可以选择更适合我们的类型。
三、数据类型的使用
// 数据类型 变量名 = 初始值
char ch = 'w';
int weight = 100;
int salary = 200000;
以上述代码第一个char类型举例,它的意思代表为:用char字符数据类型向计算机内存申请一块大小为1个字节的存储空间,为该空间取名为ch,并且该空间内的存储值初始化为‘w’。
1.比较特殊的数据类型—char
char是字符数据类型,它的用法较为特殊。
int main()
{
char ch = 'e';
printf("%c\n", ch); // %c-以字符形式输出,最终打印结果e
printf("%d\n", ch); // %d-以十进制整数形式输出,最终打印结果101
printf("%c\n", 101); // %c-以字符形式输出,最终打印结果e
printf("%d\n", 101); // %d-以十进制整数形式输出,最终打印结果101
return 0;
}
上面代码我们发现,用%c输出'e'和101,终端的打印结果为e;用%d输出'e'和101,终端的打印结果为101。
为什么char字符类型以%d能打印整型呢,为什么十进制数字以%c能打印字符呢?
我们知道,所有的数据在计算机中存储的是二进制数字。我们在键盘上可以输入各种各样的字符abf!@#$等,但是这些字符都不是二进制,在计算机内怎么存储呢?
为了解决该问题,我们可以给字符都编号,比如'a'-97、'b'-98,在计算机内以ASCII码值存储,这样字符就可以用二进制在计算机中存储。这就是ASCII编码。
每个字符都有一个对应的ASCII码值,构成的表格叫做ASCII码表。
因此,上面的代码我们以%d十进制整数形式输出字符'e'会输出101,以%c打印字符形式输出十进制整数101会输出字符'e'。
四、总结
学习C语言我们先要了解数据类型,我们学习数据类型是为了能够在计算机内更好地存储并管理数据。
存在这么多数据类型,其实是为了更加丰富的表达生活中的各种值,提供更多的选择,让我们选择一个合适的数据类型来存储数据。