2 maoxunxing maoxunxing 于 2014.12.02 22:05 提问

关于C语言无符号规格化的一个理解

看深入理解计算机系统里面。关于规格化的一段描述:
......也就是说,指数的值是E=e-Bias,其中e是无符号数,其位表示为ek-1···e1e0,而Bias是一个
等于2k-1 -1(单精度是127,双精度是1023)的偏置值。....

我知道C语言单精度的指数位是8位,取值范围是-126到127.但是我对E=e-Bias不理解。这里的e代表的是什么?本人小白求解释。。

2个回答

eagleyan
eagleyan   Rxr 2014.12.03 00:06
已采纳

e就是你的指数值,给个例子

0100 0010 1**111 0110 0000 0000 0000 0000**

第一个粗体的0是符号位,后面的10000101 = 133(十进制),这个是个单精度数,bias=127,所以指数是E - bias = 133 - 127 = 6
第二个粗体长串111 0110 0000 0000 0000 0000是你的小数部分.111011
这个数字的F = .111011 + 1 = 1.111011
这个的值 = 1.111011 x 2^6 = 1111011 = 123

这里之所以采用bias是因为指数从0~255,如何表示负数(小于1)的数,采用的是e - bias。(e大于127,是大于1,e小于127是小于1)。这样既可以表示大的数,也可以表示非常小的数(2的-128次方)。

u012823258
u012823258   2014.12.02 22:59

給你一個鏈接

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
无符号数相减问题 C语言
int main() { unsigned int a=50; unsigned int b=100; printf("%u",a-b); return 0; } 结果是4294967246 为什么呢? 实际上  CPU里只有加法器  没有减法器   做a-b运算时,实际上是做了a+(~b)+1 因为计算机运算采用补码运算 a-b=a[补码]+(-b)
c语言中无符号(unsigned)和有符号(signed)的区别
1.最大区别就是在于那个符号位 int是 两字节 16位 但是有效位为15 第1位为符合位 unsigned int 的有效位为16 但是不能表示负数的 例如:int 1111 1111 1111 1111和unsigned int1111 1111 1111 111是不一样的 前者是 -1后者是65535 2.表示的范围不同 无符号整形只有0和正数,没
c语言中有符号和无符号数据类型的区别
最大是0---65535,8位2进制数,有符号也是8位2进制,只不过第一位用来表示符号了,所以有符号的范围是-32768---32767.
C语言中有符号数和无符号数类型转换的用法深度解析
先来看个题: int8 i = -1; uint16 t = i; printf("%d",t); A.0 B.1 C.255 D.65535 答案放在末尾吧  可以拉到最后面看答案 理解有符号数和无符号数负数在计算机中如何表示呢?  这一点,你可能听过两种不同的回答。  一种是教科书,它会告诉你:计算机用“
有符号整数除以无符号整数会发生什么??!!!
今天遇到一个问题,先还原一下场景:开始时,使用32位有符号数作被除数,16位无符号数做除数,计算结果正确;然而,将除数换为32位无符号数则出现异常。代码如下 #include #include int main(void){ int32_t a=-0x1000; uint16_t b=0x50; uint32_t c=0x50; float result; result
C语言有符号数不能和无符号数比较
  无符号数和有符号数是不能进行比较运算的,否则可能会出现意想不到的错误,且极难检查出来!   首先肯几个例子(假设在32位的机器上):   1 1. 0 == 0U   2 2. -1 -2147483647 - 1   4 4. 2147483647 > (int) 2147483648U   结果如下:   1 1. 1   2 2. 0 *   3 3. 0 *   4 4. 1 *   从结果中可以看出,2 3 4都不是我们想像中的结果。在C语言中,当一个无符号数和一个有符号数进行比较运算时,有
C语言无符号有符号比较问题总结
今天看面试宝典看到这样的一道题目
C语言中无符号数和有符号数之间的运算
C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了。 unsigned int和int进行运算 直接看例子来说明问题吧 #include using namespace std; int main() {
【C语言位运算的应用】如何按bit位翻转一个无符号整型
其实现思路如下:    将目标数值进行末尾比特位摘取,将所摘取的bit位放到一个相同类型的末尾,目标数值bit位右移,相同类型bit位左移。    C语言的位运算符:650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/7C/DF/wKiom1bZndLRecyCAABFU9abgvw125.png" title="]ERO@L4PFP
C语言无符号整数和有符号整数的比较
#include int main() { int a=-1; unsigned int b=0; if(b>a)printf("b>a\n"); else printf("b<a\n"); printf("a int unsigned:%u\na in int:%d",a,a); getchar(); }程序截图 原因是a是int型,-1的补码表示是0xffffffff当以unsi