美文网首页
零基础学C语言(5):浮点型、字符和字符串

零基础学C语言(5):浮点型、字符和字符串

作者: 流光月痕 | 来源:发表于2020-04-19 09:56 被阅读0次

    上一节,我们重点介绍了bool型和整型数据,并介绍了计算机的三种码制——原码、反码和补码。既然有整型,那当然有非整型,还有字符型和字符串。

    sizeof

    前面我们说过,有很多奇怪的、由基本数据类型衍生出来的数据类型,比如long long或者long int等等,我们一时之间会不知道这些奇怪的数据类型占多大字节,该怎么办呢?

    这里教给大家一个方法——关键字sizeof记住sizeof是一个关键字,不是函数,是关键字!很多初学者甚至是很多资深的程序员都会误解sizeof是个函数,其实它是个关键字。

    怎么用呢?

    看下面这个例子:

    先来看sizeof的用法,sizeof()括号里填上定义的变量或者是数据类型都可以,我们看这个printf函数,是不是和之前有所不同,多了两个%d,还有一个逗号后面的表达式。

    首先看看一直出现的“\n”,这是啥?

    “\n”叫换行符,顾名思义,一句话打印完换一行。

    还有这个%d是什么呢?

    严格意义上来说,叫格式控制串,这个我们到具体将printf函数再说,%d表示输出有符号的十进制数,%u是输出无符号的十进制数,%f是输出浮点数,%c是输出字符型,%s是输出字符串

    上面列举了常用的几种格式控制串,大家记住就好,对应一个%+[格式字符]逗号(英文格式)后面就要加一个变量,如果有多个变量,也用逗号隔开

    我们来看结果:

    同样地,如果遇到乱七八糟的数据类型不知道占几字节,也可以用这种方式,比如long long和long int:

    当然,你可以定义一个变量,把变量放在sizeof()里也能得到同样的结果。再强调一遍,sizeof是关键字,也就是第三章要说的32个关键字(现在不止32个),不是函数。

    浮点型

    OK,接下来进入上节遗留的问题,浮点型,浮点型又称实型,很简单,基本浮点型就两个double和float,当然,还可以衍生long double型等,先看基本内容。

    float

    单精度型,一般占4字节,浮点型编译器默认保留6位精度(就是编译器默认只输出小数点后六位,除非用户自己设置保留几位),float就是6位精度,有效位数是7位。定义float a;

    double

    双精度型,占8字节,15位精度,有效位数是16位。上面举例的long double是占16字节的,一般情况下我们是用不到了,为啥呢?

    小数点后15位数都不够你用的,你想上天么?定义double a;

    我们前面介绍整型数据类型都直接告诉大家取值范围,到浮点型咋不给呢?直接给怕你们印象不深,我们通过程序写出来。

    前面告诉大家%f是可以输出浮点数的,但是在这里我们要全部显示出来,因为光听我讲精度是几位,取值范围是多少,大家怀疑,拿我们打印出来好了,所以换一个,%E或%e,按指数形式输出单、双精度实数,大家自己看。

    怎么写?

    用float.h这个头文件,老规矩,先引用:

    我们可以看到,FLT_MAX、FLT_MIN、DBL_MAX和DBL_MIN这四个大写的宏,这个宏出自float.h这个头文件里。

    啥叫宏?

    卖关子。反正这几个宏就是float和double能赋的最大值和最小值,来看结果:

    知道我为啥不直接写了吧……

    老规矩,总结上图(包括long double):

    字符类型

    我们char字符型终于上场了。无论哪种操作系统,字符类型都是占一个字节。比如char a = ‘a’;前面的a是变量,后面的a是字符,要用单引号。

    为啥是单引号?

    如果是双引号就变成了接下来要说的字符串了,记住’a’和”a”不是同一个东西。还有,前面提到的\n也是一个字符。

    说到字符类型,就不得不提一个东西——ASCII表,长啥样子呢?

    我们看一共0~255,256个,为啥是256个字符?

    因为char占一字节,无符号最大就是255。

    我们来说下这个ACSII表怎么用,看97号,字符a,程序如下:

    定义一个字符变量s,赋值为’a’,我们分别以%d和%c打印,还记得啥意思不,以十进制和字符型输出,我们看结果:

    可见,a字符在ASCII表中的确是97,没毛病吧。

    既然我们说了,char是整型和字符型,那能不能直接用整型输出字符型呢?

    当然没问题,我们看程序:

    一样是可以的。

    字符串

    C语言中使用双引号" "表示一个字符串,比如:"ABCDEF"。这就是我们在打印"Hello World!"时为什么要使用双引号的原因

    如果大家学过C++,应该知道有个string是专门定义字符串的,但C语言没有这个关键字,但也有办法,就是用数组,这个我之后再说。

    其他类型

    基本数据类型基本就给大家讲完了,至于构造类型、指针类型和void,我们之后在结构体和指针再说,咱们慢慢来。

    总结

    这一节给大家简单介绍了sizeof这个关键字(再强调一遍,不是函数),浮点型以及printf的另一种形式,还有字符型和字符串型(讲数组时详细分析)。基本数据类型已经说完了(要注意我一直强调的部分),那结束了吗?并没有,我们只是初识了数据类型。变量和常量的存在,并没有深入细聊可能存在的坑,所以,下一节继续。

    上节作业分析

    定义一个signed char型变量a,a = 128; 输出a的值是多少?请具体分析,并打印验证,欢迎小伙伴在评论区晒出你的作业!

    我们按步骤啦来,首先128是正数,其原反补码均相同:

    原码:1000 0000

    反码:1000 0000

    补码:1000 0000

    然后计算机看到第一位是1,是负数,从补码回推原码

    补码:1000 0000

    反码:1111 1111

    原码:1000 0000

    所以打印出来的是-128。

    本节作业

    以下代码的输出结果是什么?

    尽量自己做,然后敲代码验证。

    温馨提示:第一节有一个很奇怪的链接,大家记得保存哦~

    相关文章

      网友评论

          本文标题:零基础学C语言(5):浮点型、字符和字符串

          本文链接:https://www.haomeiwen.com/subject/lkqybhtx.html