C语言轻松学习-2

第二章

任务一:数据的类型

任务二:常量和变量

任务三:算术运算符和算术表达式

小结

习题

C语言数据的类型,大致可以分为:基本类型,构造类型,指针类型,空类型。今天我们只学习“基本类型”,其他类型以后会学到,感兴趣的可以先百度了解一下。

那么“基本类型”是什么腻?如下图(基本类型的分类):

从字面意思来看,“数值类型”也就是一些数字,数值而已,“字符类型”可以理解为字母,文字,符号。下面我分别制定了“数值类型”和“字符类型”的表格及简要说明。

 

类型名称 类型说明符 字节数 位数 取值范围
基本整数 int int 4 32 -2147483648~2147483647 -2^31~2^31 -1
短整数 short int short 2 16 -32768~32767 -2^15~2^15 -1
长整数 long int long 4 32  -2147483648~2147483647 -2^31~2^31 -1
无符号基本整形 unsigned int unsigned 4 32 0~4294967295 0~2^32 -1
无符号短整数 unsigned short int unsigned short 2 16 0~65535 0~2^16 -1
无符号长整数 unsigned long int  unsigned long int 4 32 0~4294967295 0~2^32 -1

打完表格之后,我才发现,这根本没有什么用,我们一般引用整数就用“int”(基本整数)就行,有利有弊,弊:会过多的占用用户电脑的运行内存。利:不用记那么多其他类型的,不易出错(这错误不会提示),轻松。实际利大于弊,因为这点以前内存条稀缺很多公司都是要求这一点,能省就省,不过很容易出错(解释一下会怎么出错:当我们调试数据很大的时候,怕自己写的某个计算公式计算出的值大于/超出该类型的取值范围,这样会出现所谓的乱值(“程序”向内存条申请变量储存地址和储存大小,已经固定好了地址和大小,我们突然让超过大小了,“内存条”肯定不愿意贡献了,但你已经超出了范围,“内存条”不管你了,导致你的数据没地方存储故会数值紊乱)哈哈,开个小玩笑)。

由百度得,1B=1字节=8bit

下面框框,是 存储单元

8bit共有八位,如下,最大值为二进制“11111111”⇔十进制“2^8-1=255”(为什么不是2^8腻?有没有发现,我们在电脑上常见的都是255,例如:打开电脑左下角,“运行”→输入“cmd”→在弹出的小黑框(命令提示符)输入“ipconfig”之后你会看见你的ip和dns及子网掩码,注意子网掩码都是255——-实际有256个方式表达,其中00000000最为特殊,所以要减去1)网格里只可填二进制数“0”或“1”

1 1 1 1 1 1 1 1

大小为1B,二进制数字为:11111111=10000000+1000000+100000+10000+1000+100+10+1,十进制数字为:255=2^8-1=2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0.

若你超出了范围则会在最大上限11111111继续+然后导致前面第一个“1”被踢了出来如下图:

1“此1已经找不到回家的路了”

1 1 1 1 1 1 1 1

最终导致,输出的数据与我们想象的不同,更难受的是,你很难找到这个bug,这可是一个“无形”的bug,它不会编译报错,会让你找的头皮发麻,且因为如今的电脑“内存条”都是如此的大,建议大家尽量用“长”的类型,不要用“短”的类型,少给自己找麻烦!

接下来,介绍一下字符类型,如下表格:

类型名称 类型说明符 字节数 位数 有效数字 取值范围
单精度类型 float 4 32 6~7 3.4×10^-38~3.4×10^38
双精度类型 double 8 64 15~16 1.7×10^-308~1.7×10^308

经过阅读上述,我相信大家肯定都是一头雾水,不过不要着急,这很正常,不必记,只求了解就行,开始写代码了:

#include<stdio.h>
int main()
{
int a=1;
float b=1;
printf("int a=%d\n",a);
printf("float b=%f\n",b);
printf("float two b=%.3f\n",b);
}

 

编译并运行成功截图:

大家,仔细看一些,第7行和第8行的不同,是不是发现了 一个是 “%f”一个是“%.3f”,而且它们所对应输出的结果也是“不同”的,发现了没有?,那个“%.3f”输出的后面有3个0,说明了还可以这样限制位数,是不是感觉非常奇妙,那么有一个问题,难道只能限制小数点后方的位数吗?那么接下来我们要尝试一下限制小数点前方的位数,

测试截图:

Emmm…由截图看来,感觉好像将“%.3f”修改为“%2.3f”感觉好像没什么用,But,又一个神奇的念头在我脑边闪过,假设将“%2.3f”改为“%更大的数.3f”会是什么样子腻?难不成编译器直接报错?带着疑问,我们来到编译器敲写一下试一试,

测试代码截图:

不可思议,竟然前面多了3个空格,我感觉有点神奇,我输入的是“10”为什么是3个空格腻?但是整体查一查,3个空格+6个数字+1个小数点刚好=10,我去,这会不会就是设置“%x.yf”中“x”的一个隐藏含义?为了证实我的猜想更准确,于是我便换了“%10.3f”改写为“%15.3f”测试一下,

测试截图:

很明显,刚好满足我上述所说,“%x.yf”“x”代表小数点前方总共的位数(不够的话空格来填补)而“y”代表的是小数点后面的位数(不够的话“0”和未知的数字来填补(举一反三得来的))

下面我们来证实一下,上述“y”超过了会是怎么样?

证实截图:

 

于是我又冒出来了一个问题,它是如何限制位数的?是四舍五入了?还是直接抹除了?那么接下来,我们要开始证实了。

证实截图:

啊哈,我修改了下“b”的初始值,看看是不是“四舍五入”,果不其然,就是“四舍五入”

好了,我们任务一完成了,接下来开始学习任务二(常量与变量)点击下一页进行学习

本文作者为:晗雅|星空,转载请注明!版权必究!
1 2 3 4
分享到:

请选择你看完该文章的感受:

12瞧一瞧 0扯淡 10学到了 1不懂 5正能量 0无聊

评论抢沙发

评论前必须登录!