helllo,小伙伴们,大家好。这里是左左右。这节课我们接着讲c语言基础。在讲数据类型前先讲一下内存的概念,这里假设这一块就是我们的内存。我们把内存分为很多个小格子。一个小格子中只能存储1位二进制数。它里面可以是0,也可以是1。在计算机中把它命名为bit,它是内存中最小的存储单元。
8个bit组成1byte,也就是一个字节。1024byte组成1KB。以此类推1024kb组成1MB,1024MB组成1GB,1024GB组成1TB。那么,一个字节最多表示多少个数呢?我们先算一个我们熟悉的,两位十进制最多能表示多少个数呢?这个很简单吧,0-99共100个数,也就是10的二次方。

以此类推,一个字节最多能表示2的8次方个数,也就是0-255 共256个数。其中最小值就是八个0对应十进制0,最大值是8个1 ,对应10进制255。接着,我们在主函数中打印char类型的数据所占的内存空间。这里用到sizeof,输出值为1。因为sizeof的返回值为字节数。

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

好的我们写代码来验证一下,这里的%c就代表字符型。%d就代表整数型。是不是输出结果和我刚才讲的一模一样?既然我们输入的是字符,但在电脑中存的就是一个二进制的整数。
那么,我们直接输入字符对应的asc码值是不是也可以啊?好的,我们来验证自己的想法。是不是输出的结果也是一样的,这里十进制转二进制电脑自动完成?不用我们操心。这里我们顺便讲一下16进制和2进制相互转换的方法。这个很重要,一定要学会。要学会16进制和2进制相互转换,首先一定要记住4个数字。
那就是8421。接下来我们将01100001转换十六进制数。首先,我们将01100001分为两组,4位为一组。每一位分别与8421这四个数相乘。再将每一组的数相加,第一组为1,第二组为6。于是就得到16进制数为61。

接下来我们将61转换为二进制数。首先,我们将二进制分为两组,4位为一组。十六进制中的1,我们8421中正好有1。与1对应的二进制填入1,其他填0。十六进制中的6,我们8421中4加2等于6。与4和2对应的二进制填入1,其他填0。就得出二进制数01100001。我们打开计算器来验证一下,是不是没有问题?

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