Skip to main content

9.一节课讲明白c语音中的数据类型

       hello,小伙伴们,大家好,这里是左左右,这节课我们接着讲c语言基础,在讲数据类型前先讲一下内存的概念,这里假设这一块就是我们的内存,我们把内存分为很多个小格子,一个小格子中只能存储1位二进制数,它里面可以是0,也可以是1,在计算机中把它命名为bit,它是内存中最小的存储单元,8个bit组成1byte,也就是一个字节,1024byte组成1KB,以此类推1024kb组成1MB,1024MB组成1GB,1024GB组成1TB。 Docusaurus logo        那么一个字节最多表示多少个数呢?我们先算一个我们熟悉的,两位十进制最多能表示多少个数呢?这个很简单吧,0-99共100个数,也就是10的二次方,以此类推,一个字节最多能表示2的8次方个数,也就是0-255 共256个数,其中最小值就是八个0对应十进制0,最大值是8个1 ,对应10进制255。 Docusaurus logo        接着我们在主函数中打印char类型的数据所占的内存空间,这里用到sizeof,输出值为1,因为sizeof的返回值为字节数,所以char类型的数据所占内存空间为1个字节。

main.c
#include<stdio.h>
int main(){
char b = 'a';
printf("%zu",sizeof(b));
}

       这里有人肯定就要问了,字符'a'是怎么来的?你刚才不是说一个字节只能代表0到255的数吗?这里我们就要引出asc码表了,从中不难发现,在asc码表中,字符'a'的asc码值十进制为97,16进制为61。
                                             Docusaurus logo
       这里其实不难理解,相当于人和电脑之间有个翻译官,当我们输入字符'a'时,这个翻译官就会将它翻译成97,交给计算机中的内存,对应二进制是01100001,当我们想要输出变量b时,如果我们要的是字符型,这个翻译官就把字符a给咱们,如果我们要的是整数型,这个翻译官就直接把97给咱们,好的我们写代码来验证一下,这里的%c就代表字符型,%d就代表整数型,是不是输出结果和我刚才讲的一模一样?

main.c
#include<stdio.h>
int main(){
char b = 'a';
//printf("%zu",sizeof(b));
printf("%s,%d",b,b);
}

       既然我们输入的是字符,但在电脑中存的就是一个二进制的整数,那么我们直接输入字符对应的asc码值是不是也可以啊?好的,我们来验证自己的想法,是不是输出的结果也是一样的。

main.c
#include<stdio.h>
int main(){
char b = 'a';
//printf("%zu\n",sizeof(b));
printf("%c,%d\n",b,b);

int c = 97;
printf("%c,%d\n",c,c);
}

       这里十进制转二进制电脑自动完成,不用我们操心,这里我们顺便讲一下16进制和2进制相互转换的方法,这个很重要,一定要学会,要学会16进制和2进制相互转换,首先一定要记住4个数字,那就是8421,接下来我们将01100001转换十六进制数,首先我们将01100001分为两组,4位为一组,每一位分别与8421这四个数相乘,再将每一组的数相加,第一组为1,第二组为6,于是就得到16进制数为61。 Docusaurus logo
       接下来我们将61转换为二进制数,首先我们将二进制分为两组,4位为一组,十六进制中的1,我们8421中正好有1,与1对应的二进制填入1,其他填0,十六进制中的6,我们8421中4加2等于6,与4和2对应的二进制填入1,其他填0,就得出二进制数01100001。 Docusaurus logo
       我们打开计算器来验证一下,是不是没有问题,照猫画虎,我们将其他数据类型也用sizeof打印出来,这里大家大概记一下就行。

main.c
#include<stdio.h>
int main(){
// char b = 'a';
//printf("%zu\n",sizeof(b));
// printf("%c,%d\n",b,b);

// int c = 97;
// printf("%c,%d\n",c,c);
printf("%zu\n",sizeof(char));
printf("%zu\n",sizeof(short));
printf("%zu\n",sizeof(int));
printf("%zu\n",sizeof(long));
printf("%zu\n",sizeof(long long));
printf("%zu\n",sizeof(float));
printf("%zu\n",sizeof(double));
}

       现在我们假如c语言的发展过程中根本就没有数据类型这一说法,当我们定义一个变量时,计算机也不知道你要输入多大的数,是不是只能把8个字节的空间都给你啊,当你实际赋值时,你只给了个整数0,这样是不是就造成大量内存空间的一个浪费啊,所以定义数据类型是为了增强内存了利用率,既然数据类型占用的空间是有限的,那我们的变量值也是有限的,具体的数据类型的范围我们当作课后作业留给大家去百度查一下吧,查完也不用去记忆,现用现查就行,好的,今天的课程就到这里了,您的一键三连和关注是我持续更新下去的最大动力。