亲,关于C语言的两个问题,100分悬赏!!!!
1.书上写了单精度实行变量的数值范围是3.4X10^(-10)~3.4X10^38(^表示次方)请问这个数值范围是怎么算出来的啊?2.如果编程过程中赋值a=32767,b...
1.书上写了单精度实行变量的数值范围是3.4X10^(-10)~3.4X10^38 (^表示次方)
请问这个数值范围是怎么算出来的啊?
2.如果编程过程中赋值a=32767,b=-32768,u=1,c=a+u,d=b-u,其中,a,b,c,d,u都为整形变量,那么计算出来的c和d分别是多少? 我感觉c=-32768,d无法计算。。。。对不对啊? 展开
请问这个数值范围是怎么算出来的啊?
2.如果编程过程中赋值a=32767,b=-32768,u=1,c=a+u,d=b-u,其中,a,b,c,d,u都为整形变量,那么计算出来的c和d分别是多少? 我感觉c=-32768,d无法计算。。。。对不对啊? 展开
展开全部
第一个问题,我也不知道,我是从网上搜索到的,也比较容易懂,答案如下:
实数的计算机内部表示由具体系统规定,其中不少系统采用通行的国际标准(IEEE 标准,IEEE 是电子电器工程师协会,是一个著名的国际性技术组织):
(1) 浮点类型的数用4个字节32位二进制表示。这样表示的数大约有7位十进制有效数字,数值的表示范围约为±(3.4×10^38…3.4×10^38);
(2) 双精度类型的数用8个字节64位二进制表示,双精度数大约有16位十进制有效数字,数值的表示范围约为±(1.7×10^308…1.7×10^308);
(3) 长双精度类型的数用10个字节80位二进制表示,大约有19位十进制有效数字,其数值的表示范围约为±(1.2×10^4932—1.2×10^4932)
单精度规定用8位二进制表示阶数,即最大表示为2的128次方,把这个数算出来是3.4028236692093846346337460743177e+38
双精度规定用11位二进制表示阶数,即最大表示为2的1024次方,结果是1.797693134862315907729305190789e+308
float(单精度说明符),double(双精度说明符)
单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
单精度8位阶码,1位符号,剩下23位尾数,算出2的负23次方,得到
0.00000011920928955078125
前面0有多少个,就表示能精确到那一位
双精度11位阶码,1位符号,剩下52位尾数,算出2的负52次方,得到0.00000000000000022204460492503130808472633361816
前面0有多少个,就表示能精确到那一位
原文地址:http://bbs.bccn.net/thread-316069-1-1.html
第二个问题:
对于十六位机器而言,如果是int型,则c是-32768。最高位为符号位。
d=32767
说明:32767十六进制0x7fff这是十六位表示的最大有符号正数了
32768十六进制0x8000符号位是1,自然就是负数了
正数和负数换算就是二进制位按位取反再+1
d的解答类似
实数的计算机内部表示由具体系统规定,其中不少系统采用通行的国际标准(IEEE 标准,IEEE 是电子电器工程师协会,是一个著名的国际性技术组织):
(1) 浮点类型的数用4个字节32位二进制表示。这样表示的数大约有7位十进制有效数字,数值的表示范围约为±(3.4×10^38…3.4×10^38);
(2) 双精度类型的数用8个字节64位二进制表示,双精度数大约有16位十进制有效数字,数值的表示范围约为±(1.7×10^308…1.7×10^308);
(3) 长双精度类型的数用10个字节80位二进制表示,大约有19位十进制有效数字,其数值的表示范围约为±(1.2×10^4932—1.2×10^4932)
单精度规定用8位二进制表示阶数,即最大表示为2的128次方,把这个数算出来是3.4028236692093846346337460743177e+38
双精度规定用11位二进制表示阶数,即最大表示为2的1024次方,结果是1.797693134862315907729305190789e+308
float(单精度说明符),double(双精度说明符)
单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
单精度8位阶码,1位符号,剩下23位尾数,算出2的负23次方,得到
0.00000011920928955078125
前面0有多少个,就表示能精确到那一位
双精度11位阶码,1位符号,剩下52位尾数,算出2的负52次方,得到0.00000000000000022204460492503130808472633361816
前面0有多少个,就表示能精确到那一位
原文地址:http://bbs.bccn.net/thread-316069-1-1.html
第二个问题:
对于十六位机器而言,如果是int型,则c是-32768。最高位为符号位。
d=32767
说明:32767十六进制0x7fff这是十六位表示的最大有符号正数了
32768十六进制0x8000符号位是1,自然就是负数了
正数和负数换算就是二进制位按位取反再+1
d的解答类似
追问
谢谢您的回答!可我还是没搞懂为什么你说的d=32767?您能再说明一下吗?
我觉得d=b-u,b的二进制是1000 000 000 000 000,-u是1111 111 111 111 111,,所以b-u=10111 111 111 111 111,这并不是32767的二进制形式啊
展开全部
楼主应该去了解二进制的基本原理的。
比如说整型,在VC以前版本中,int型占的是2个字节,每个字节有8位,也就是总共有16位。对于无符号类型来说,32位全部用来表示数值,而对有符号的来说,最高位用来表示正负,0正1负。那么对于有符号的来说,最大值在内存中的表示为 01111...(15个1),也就是2的15次方剪1,等于32767,类似的可以得到最小值为-32768,这其中需要了解到二进制补码。当到达最大值时,再加就溢出到了最小值,也就是32767+1= -32768,这是一个循环,可以一直进行计算的。。。
所以,剩下的我就不用说了吧
比如说整型,在VC以前版本中,int型占的是2个字节,每个字节有8位,也就是总共有16位。对于无符号类型来说,32位全部用来表示数值,而对有符号的来说,最高位用来表示正负,0正1负。那么对于有符号的来说,最大值在内存中的表示为 01111...(15个1),也就是2的15次方剪1,等于32767,类似的可以得到最小值为-32768,这其中需要了解到二进制补码。当到达最大值时,再加就溢出到了最小值,也就是32767+1= -32768,这是一个循环,可以一直进行计算的。。。
所以,剩下的我就不用说了吧
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.你可以去看看单精度的国际标准。百度百科里面有。科学计算的表示中阶码有8为表示出去符号位还有7为,可以表示的最大阶数就是2^7-1=127,所以可以表示的最大数是1.111111111111111111111(二进制的,接近于10进制的2)*2^127(10进制)==2^128=3.4X10^38。
2.如果你的计算机是16位的,并且使用int型的话将溢出,long可以正常工作。如果只考虑16位int型,32767+1表示为:7fff+1=8000,即符号位为1,则结果是一个负数的0(注意这种说法),而不是-32768. -32768-1表示为:ffff+8001=8000(这里的处理,不同机器不同处理,有的直接报错,有的截取)。并且上面只是考虑机器采用原码表示的情况,有的机器采用补码或反码表示,结果也很可能是你说的那种情况c=-32768。
2.如果你的计算机是16位的,并且使用int型的话将溢出,long可以正常工作。如果只考虑16位int型,32767+1表示为:7fff+1=8000,即符号位为1,则结果是一个负数的0(注意这种说法),而不是-32768. -32768-1表示为:ffff+8001=8000(这里的处理,不同机器不同处理,有的直接报错,有的截取)。并且上面只是考虑机器采用原码表示的情况,有的机器采用补码或反码表示,结果也很可能是你说的那种情况c=-32768。
追问
亲,您好!谢谢您的解答!其实我是C预言初学者,我能再问您一个问题吗?就是,字符串常量中在内存中所占字节数是等于字符数量+1吗? 还是恒占两个字节呢?
追答
加入这样声明 char s[] = "abcd",内存中的存放为:a b c d \0而char类型为一个字节所以可以说是字符数加1,但是我们引用这个字符串时,只能使用字符串首字母所在的地址即a的地址,而专业叫法就是指针。而这个指针的存放地址倒是恒定的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c=32768 d=-32769
-32768到32767 是根据就得IBM PC兼容机有16位得出的
现在都是32 64的了 所以会取的更大范围
-32768到32767 是根据就得IBM PC兼容机有16位得出的
现在都是32 64的了 所以会取的更大范围
追问
亲,,如果是16位机的话,d用二进制表示已经超过16位了,对不对??
还有第一题,您能解答一下吗?谢谢亲了!
追答
这不是你的擅长领域啊 .....
这里有篇文章 你看了就会明白了
http://blog.csdn.net/rsp19801226/article/details/3085343
溢出的话就会回到起点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询