负整数带小数转二进制(有关C++问题)

来源:百度知道 编辑:UC知道 时间:2024/06/01 16:07:00
负整数带小数转二进制
在计算机里面,负数是用补码表示!
那么负的小数怎么求补码,
有整数的负小数又怎么求补码?
比如: -15.75 这个计算机怎么表示(把原码,反码,被都告诉我)
-0.75 这个计算机怎么表示(把原码,反码,被都告诉我)

还有一个问题!例1:-0.1011乘以2的3次方,这个怎么用公式表示!(含有字母e的那种公式)
例2:0.1011乘以2的-3次方,这个怎么用公式表示!
注:本人二进十进制互转会
不要复制别人的长编大论来,我看不懂!
只要把我这几个问题的答安告诉我就行了!
最好在讲解一下!
小弟先谢啦!
原来是这样啊!那你们谁把这几个数的浮点数值写给我吧!
说长篇大论没用的!给我几个例子我到能看懂的!

浮点数使用IEEE754浮点标准保存
以下内容需要知道二进制小数转换十进制计算方法和整数一样,都是对每一位用2的幂加权。
另外非计算机相关专业的人士可能需要反复阅读,不是很好理解

IEEE浮点标准用 V = (-1)^s * M * 2^E的形式表示
V就是值
符号(sign)s决定正负,对于0有特殊处理
有效数(significand)M是一个二进制小数,范围在1~2或0~1之间
指数(exponent)E是2的幂(可以是负数),对浮点数加权

浮点数划分成3个域
一个单独符号位编码s
k位指数域 exp = e(k-1)...e(1)e(0)编码指数E
n位小数域 frac = f(n-1)...f(1)f(0)编码有效数M,但被编码的值依赖于指数域是否为零。

在C/C++中的float下 s有1位,exp有k=8位,frac有n=23位,double变量下k=11,n=52

根据exp的值,编码分三种状况:
1.规格化值
最普遍的状况,当exp的位模式既不是全为0也不是全为1时,就都属于这种状况。此时,指数域解释为偏置形式,E = e-Bias(e减Bias),e是无符号数,而Bias是一个等于2^(k-1) -1的偏置值。由此产生了指数的取值范围,float: -126~127,double: -1022~1023
小数域解释为描述小数值f,在0~1之间,有效数定义为M = 1+f,这样隐含了开头的1,免费获得了一个额外的精度位

2.非规格化值
指数域全为0,就是非规格化的值,此时,指数值是 E = 1 - Bias(Bias定义同上),有效数的值是 M = f,没有开头的1。 值得注意的是这种方法对0的表示。+0.0的浮点表示中,位模式全为0:符号位是0,指数域全0,小数域也是0。而-0.0只有符号位是1,其他全0

3.特殊值
指数域全为1,就是这类数。
当小数域全为0时,得到的值表示无穷,s=0正无穷,s=1负无穷。当这两个非常大的数相乘或对某数除以0可以得到溢出的结果。