问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言顺序结构

发布网友 发布时间:2022-05-06 13:44

我来回答

3个回答

热心网友 时间:2022-06-30 19:35

这个牵涉到浮点数在计算机中的表示。计算机中数字是以0和1二进制保存的,我们熟悉的是整数的如何在计算机中表示,那么浮点数是如何表示的呢?

一.    转换
我们先来看看如何将十进制的浮点数转换成二进制。
一个十进制的浮点数,例如:abcd.efg  (其中a~g为0..9),其值用多项式为:
a*10^3 + b*10^2 + c*10^1+d*10^0+e*10^(-1)+f*10^(-1)+g*10^(-3)。

而一个二进制的浮点数,我们也将其表示成:abcd.efg  (其中a~g为0或1),其值表示为:
a*2^3 + b*2^2 + c*2^1+d*2^0+e*2^(-1)+f*2^(-1)+g*2^(-3)。

我们看到底由十进制时的10换成了二进制时的2了,其它都一样。所以一个十进制的浮点数转换成二进制必须分两步进行:整数部分和小数部分。
1.    对于整数部分,和以前的整数转换是一样的。
2.    对于小数部分,比较特殊。下面讲两种转换方法。
方法一:依次与2^(-n)作比较(n从1开始),若大于该值则为1,且减去此值,否则为0;然后继续下一轮比较。举例说明:将0.842356转换成二进制:

此时,你会发现比较将会是无穷无尽的。如果你截取到某位,必须做一些取舍。取舍的标准是:其后一位若为1则进1;后一位为0则不进。

还是以上面为例,若要截取9位,因为第10位为0,故不进位,则最终的结果为:0.110101111

;若要截取到8位,因为第9位为1,故要进位,则最终的结果为:0.110110000

(即0.1101101111 + 0.0000000001)。从这个例子可以看出十进制小数的转换成二进制时只是一个近似值。其实大部分浮点数保存在计算机中都只是一个近似值。至于是稍微大于原值还是稍微小于原值,要看截取时有无进位。


方法二:若在计算机中计算方法一的过程,因为2^(-n)本身就是一个浮点数,而浮点数之间的比较和计算难免有误差。所以我想到了下面这个方法:
1)    首先生成首数字为1、后面0的个数为小数位数的基准数,比如0.254的基准数为1000、0.00353的基准数为100000。
2)    将小数部分乘以上面的基准数,这样得到一个整数。
3)    对该整数乘以2,若积大于基准数,则为1,同时将积减去基准数后得新的整数;若积小于基准数,则为0。
4)    用新的整数重复步骤3,直到整数为0或者到需要的精确位数,作取舍后结束。

举例说明:将0.842356转换成二进制,基准数为1000000,转换成整数为842356,

此法可以有效地避免浮点数的比较,能方便且快捷地获得对应的二进制值。


二.    存储
现在已转换成浮点二进制了,那么如何在计算机中表示呢?这要说到科学计数法,这个大家比较熟悉。十进制的科学计算法可以表示成如下:(-1)^s * M * 10^E
,S表示符号:S为1表示负数;0为正数。M成为尾数,其范围为1<=M <10 。E被成为幂,也叫指数。

二进制的科学计数法,也是IEEE的浮点数标准格式,和十进制格式一样:(-1)^s * M * 2^E
。M的范围1<= M <2。将一个二进制浮点数转换成科学计算法很简单,例如:
1)10001.110001 小数点左移4位后成 (-1)^0 * (1.0001110001) * 2 ^ 4.
2) -0.000010001 小数点右移4位后成(-1)^1 * (1.0001) * 2 ^ ( – 4)

在计算机中,表示浮点数由两种常用的格式:单精度浮点数和双精度浮点数,它们在精度上有所差别,同时所需要的空间也有差别:

1)    当为负数时,符号位为1,否则为0。
2)    指数有正数亦有负数,这里保存时使用了加偏移量的方法:8位指数位的指数范围为-127~128,其偏移量为127;11位指数范围为-1023~1024,其偏移量为1023。保存时指数加上偏移量,可以避免负数问题;取值时再减去偏移量就行了。
3)    因为尾数1<=M<2,就是说小数点前面总是有一个1。为了节省空间,将此处的1省去,直接将小数点后面的部分放入到小数部分(这也是这部分为什么叫“小数部分”,而不是“尾数部分”的原因)。

举一例:将12.842356保存成单精度浮点格式。
1)    首先将它转换成二进制格式:1100.11010111101001001010,后面位直接截去。
2)    转换成科学计数法格式:1. 10011010111101001001010。右移3位于是指数为3+127=130,二进制为10000010。
3)   
于是符号位为0,指数为:10000010,小数去掉前面的1后为10011010111101001001010。这些二进制就是最终保存在电脑里的格
式:0 10000010 10011010111101001001010,十六进制格式为:0x414D7A4A。

热心网友 时间:2022-06-30 19:35

小数是以二进制存储的,也就是说小数是通过2(负1次方)+2(负2次方)+2(负3次方)+。。。。+2(负N次方)N越大越精确
0.456对应的二进制数是0.01110100101111000111101101000101
而这个二进制数对应的十进制数是0.45600099978037178516387939453125
由于精度问题进行了四舍五入也就是后面的09997变成进了1位所以是0.456001

所以,小数和二进制数不是一一对应的 。

热心网友 时间:2022-06-30 19:36

在计算机里,float是用2进制浮点数表示的,10进制的123.456转换成2进制,就有了误差,再转回来,就看到这个误差了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 C语言小问题,顺序结构 C语言顺序结构程序题目两道求解 国二C语言 顺序结构小题 c语言顺序结构练习题 内酯豆腐可以用来炸成油果吗? 皮肤怎么变白,身体有些地方比较黑!! 我的皮肤天生比较黑,怎么才能变白 我是后天变黑的,如何全身美白? 全身晒得很黑,怎么快速美白? 身体黑怎么变白 宽带猫的默认ip地址是192.168.1.1 路由器的默认ip地址是192.168.0.1 怎么办 我女朋友长得挺漂亮,气质是淑女,我很爱她。就是经常放屁,一天至少要放四五十次,放的屁还很臭,声音又 女生放屁会害羞吗? 宿舍有个女生,是女神,天天在宿舍放屁,,都烦死了,该怎么办? 蔡依林花蝴蝶封面照的内只大蝴蝶美甲是怎么做的啊? 美女是怎样放屁的 有多少男的 是同性恋 请问为什么现实生活中勇敢的男同性恋很少? 真正的同性恋能有多少 男同性恋产生的原因 C语言顺序结构两道题目求解 C语言 利用顺序结构语句编写程序,用格式控制符打印一下图形 (还有一些题目) C语言、顺序结构,求解,很急,求帮忙 c语言顺序结构的问题 呵呵,问一个C语言顺序、选择、循环结构的问题。 c语言顺序结构程序 立体几何计算题怎么编写啊啊?求解 C语言版数据结构上机题:利用已有的顺序表的代码完成以下题。 一道C语言结构题,求大神解答: n个人依次报数,每报到m从圈中退出,依次输出退出人的号码(用数组) 迷你世界棉花树长什么样 迷你世界如何让桃花变的正方形呢 广州优必格文化传媒有限公司怎么样? 怎么经营一个文化传播公司 广州帛铎文化传播有限公司怎么样? 广州不出名文化传媒有限公司怎么样? 广州懂点文化传媒有限公司怎么样? 广州市闪扑文化传媒有限公司怎么样? 广州市千信文化传媒有限公司怎么样? 为什么手机无法下载东西了? 不是储存空间不够的原因 手机为什么下载不了东西了 为什么手机下载不了东西