第4章:数据类型

我们使用计算机语言是干什么呢?是写程序,写程序干什么呢?是解决生活中的问题

      比如写一个图书管理系统,写一个购物商城都是在解决生活中的问题,既然计算机语言能够写程序解决生活中的问题的话,那计算机语言必须有能力来描述生活中的问题!

      例:如果写一个购物商城,商城里面得上架商品,商品得有价格,因此我们写出来的程序必须有能力来描述价格,比如价格15.6元,它是一个小数。我们必须有能力描述一个价格的话,其实就是必须有能力描述一个数字,那么重点来了:对应到 C 语言里面来:C 语言如果实现的话,C 语言必须要有能力来描述这个数字,这个时候呢这个小数15.6在 C 语言里面叫浮点型。小数点这个点是可以浮动的:15.6可以写成1.56*10^1,和科学计数法的表示形式不一样

      再者我们要是描述一个人的年龄呢?比如这个人69岁了,它是个整数,属于 C 语言如果要描述整数的话,又有一个类型叫整型

      所以计算机语言要去描述生活中的问题,它必须能够把所有的问题描述清楚,比如说数据,它得有类型吧,C 语言里边就给出来了一个浮点型来描述小数

4.1 C语言提供的7种数据类型

      那 C 语言里面到底提供了哪些类型呢?如图所示:

1. char                字符型            它里边可以放1个字符,如a,b,c,d,e等等

2. short               短整型            它来自 int

3. int                   整型

4. long                长整型

5. long long         更长的整型 

6. float                单精度浮点数

7. double            双精度浮点数

      这些数据类型都是 C 语言支持的,他们怎么用的呢?假设我现在想存储一个字符,我这里有一个字符a,a 要描述成字符的话,在 C 语言里面用2个单引号引起来叫字符 a,如果写成代码字符 a,存储起来怎么存呢?肯定得写出主函数,比如我现在有一本书,我想放起来,我得找一个空间来放,我可能放到书架上,这个暑假上有个格子我才能把它放进去,也就是说,什么东西存储得有个空间,再比如我有一些水,想放起来,是不是得有个杯子,所以要存起来的话,得需要空间,所以字符a存起来的话,也得有个空间,所以我们就创造一个 char 类型空间,我们拿 char 类型创建了一个空间叫 ch,这个空间里面就可以存放字符a,如图所示:

这段代码再讲明白点,就是把字符a,放到放到这个 ch 的变量空间里边去,这个 char 就是字符类型

      接下来讲一讲 short 短整型:int 是整型,在整型的基础上又造出来了一个 short (int)叫短整型,这个 int 可以省略,所以叫 short,顾名思义,就是比整型再短一点

      所以后面都是一样的,我就不一一往下介绍了,其实还有长整型 long,还有更长的整型 long long(用来写电话号码的时候定义这个类型)

      还有两个小数的类型,分别是 float 和 doule,比如这个人的体重是69.9 kj,这种叫浮点型或者叫单精度浮点型,如图所示:

      其实还有一个叫 double 双精度浮点型,从名字上就可以看出来:double 类型的精度比 float 的精度要更高一些,如图所示:

那接下来我们实现一下,如何打印整数:

      首先这个是我们正常看到的一个现象,那么问题来了,如何打印一个整数呢?具体这么写,括号里面写一个%d,%d 对应的格式就是打印整数

      那么我打印这个%d 是谁呢,这个整数是谁呢?这个时候是指定打印一个格式,如图所示:

比如打印100,以整型的形式打印就可以了,如下如所示:

详细讲解一下:printf 后面一个圆括号,100是个函数,100函数的第一个参数给了一个双引号%d\n,第二个参数给了100,100按照%d,也就是按照整型的形式打印

4.2 sizeof

4.2.1 求数据类型的字节大小

      既然会了这个,那我们打印一个大小吧!比如打印一个 char 类型 a 的大小,怎么算这个 char 类型的大小呢?有一个关键字叫 sizeof

在这里,我解释一下 sizeof:它是一个关键字,也是 C 语言中的一个操作符

它的作用是用来计算类型或者变量所占空间的大小,当我们写成sizeof(char),sizeof 就是谁的大小,char 的大小,如图所示:

那么同理:

由此可见:sizeof(char)打印的结果是1,那么问题来了:1什么?一字节、一头牛、一条鱼,那个1什么,单位是什么:sizeof 算的单位是字节

一个 char 是几个字节呢?                1个byte                                也就是8个bit

一个 short 是几个字节呢?               2个byte                                也就是16个bit

一个 int 是几个字节呢?                   4个byte                                也就是32个bit

一个 long 是几个字节呢?                4个byte                                也就是32个bit

一个 long long 是几个字节呢?        8个byte                                也就是64个bit

一个 float是几个字节呢?                 4个byte                                也就是32个bit

一个 double是几个字节呢?             8个byte                                也就是64个bit

4.2.2 字节之间的换算

      有的同学可能说我对字节不了解,很好!有问题提出来就是好样的,那我们就普及一下计算机中的单位有哪些:

      最小的单位叫 bit,也叫比特位,那么一个比特位有多大呢?我们都知道,计算机中是二进制的,识别二进制,那么二进制里面有1和0(小于2的数字);同理10进制数字里边:只能是0-9的组成;8进制里边:指0-7组成的;16进制里边:由0-F组成的。其中10为A,11为B,12为C,13为D,14为E,15为F

       那么重点来了:二进制里面有1和0的时候,1个1要存储的话,它所需要的空间是多大呢?就是1个比特位;1个0如果要存进去的话,需要的空间多大呢?就是1个比特位

因此,一个比特是用来存放一个二进制位的,它是计算机里边最小的单位

那么在 bit 上面还有 byte 叫字节,1个字节等于8个比特位,byte:字节

byte 再往上叫 kb,kb等于1024个byte                                     kb:千字节

kb    再往上叫 mb,mb等于1024个kb                                    mb:兆字节

mb   再往上叫 gb,gb等于1024个mb                                      gb:吉字节

gb    再往上叫 tb,tb等于1024个gb                                          tb:太字节

tb    再往上叫 pb,pb等于1024个gb                                        pb:拍字节

pb    再往上叫 eb,eb等于1024个pb                                       eb:艾字节

如果你想继续研究,没问题,可以奉陪,后面一直到最后分别是:ZB,YB,BB,NB,DB,CB,XB

zb(泽字节),yb(尧字节)

值得注意的是:PB 在我们生活中已经不太常见了

4.3 面试题1:为什么long没有比int长

面试题1:short 叫短整型,int 叫整型,短整型是2,整型是4,那确实是短,但是这个 long 是长整型,为什么它没有比 int 长呢

      因为 C 语言标准规定:sizeof(long)它的大小只要大于等于 sizeof(int)就可以了,它 没有规定一定要大于,所以当前我们编译器采用的是等于的情况

4.4 面试题2:为什么C语言里有这么多类型

面试题2:为什么对于整型有 short,int,long,long long,光是个整型就搞出了4个,为什么这么麻烦呢?为什么 C 语言里有这么多类型?

      举一个例子:如果我存的数字较小,short 只要16个比特位,里边存的数字能小一点,最大值也比较小,不会太大。但是 int 里边存的值就更大一些了,所以,如果我存的那个值本来就不大,我们该选择 short,它更省空间一些,而选择 int 的话,空间浪费的更多一些 

      因此:我们提供的类型更加丰富,那我们在选择类型的时候,选择性会更多,就让我们空间的利用率会更高,我们选择最适合我们的类型,所以这就是为什么在 C 语言里边有这么多的类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值