Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C exponet的8位与32位偏差_C_Binary_Bit - Fatal编程技术网

C exponet的8位与32位偏差

C exponet的8位与32位偏差,c,binary,bit,C,Binary,Bit,我正试图通过二进制数和标准化值来工作。我很困惑,因为我们被告知数字是用8位值表示的。我们将使用8位的示例,其中1位是符号,接下来的4位是指数,最后3位是数字。一切正常,然后我们跳转到32位数字,其中1位是符号,接下来的8是指数,最后的23是剩余的数字 我的问题是,为什么会有不同的表述?有时数字是8位有时是32位?为什么不把它们设为3位,有时设为13位呢?还是将它们设为40位和64位?似乎没有押韵或理由。当我们谈论数字或32时,我们是在处理8位吗?这里有一个例子 任何解释都会有帮助。现在我不知道

我正试图通过二进制数和标准化值来工作。我很困惑,因为我们被告知数字是用8位值表示的。我们将使用8位的示例,其中1位是符号,接下来的4位是指数,最后3位是数字。一切正常,然后我们跳转到32位数字,其中1位是符号,接下来的8是指数,最后的23是剩余的数字

我的问题是,为什么会有不同的表述?有时数字是8位有时是32位?为什么不把它们设为3位,有时设为13位呢?还是将它们设为40位和64位?似乎没有押韵或理由。当我们谈论数字或32时,我们是在处理8位吗?这里有一个例子


任何解释都会有帮助。现在我不知道我应该根据8位还是32位来学习材料,第一位是符号,第二位是指数,最后23位是实际数字。非常困惑。

我想你是被教过如何用8位来表示浮点数的,因为用较小的数字进行数学运算要容易得多;但是,您只能用8位表示这么多的数字(确切地说是256个不同的数字)

正如您所说,您了解了浮点数是如何使用8位的

Seeennn——其中s是符号位,E是指数,N是数字/有效位

数字的符号是符号位的-1

指数是以有符号整数或无符号整数表示的eponent下注减去表示偏差

有效位为1+SUM i=1到pn[i]*2^(-i),其中p是有效位位数/位数的精度

该值可计算为: -1^S*2^(指数)*有效位

作为一个更具体的例子(指数偏差为2^(4-1)-1=7)

0 1000 101

s = 0
exponent = 8 - 7 = 1
significand = 1 + 0.5 * 1 + 0.25 * 0 + 0.125 * 1 = 1.625
value = (-1)^0 + 1.625 * 2^1 = 3.25
相同的表示方案可以应用于任意数量的位。在这方面,选择值8或32是相当随意的

通常选择32位和64位来表示二进制格式的浮点数,因为它们是2的幂,很容易存储在内存中(字节的整数),并且计算机ALU设计用于32/64位数字

在C语言中,浮点是32位,双精度是64位


您可以阅读有关IEEE-754浮点表示的更多信息。Wikipedia很好地解释了它是如何工作的

representable range。只有这么多的数字可以压缩成8位,等于32位。e、 g.从帽子里拿出数字,也许你的8位表示可以做
-15.999->+16.000
,而32位版本可以做
-15999999.999999->+1600000000.000
,不要太在意位数。在8位和32位情况下,您描述了一种使用x指数位和y尾数位的格式。无论x和y的值是什么,格式背后的逻辑都是相同的。