C 整数表示到浮点表示
是否有一种算法可以通过使用整数运算将整数表示中的32位整数转换为IEEE 754浮点表示C 整数表示到浮点表示,c,algorithm,floating-point,ieee-754,C,Algorithm,Floating Point,Ieee 754,是否有一种算法可以通过使用整数运算将整数表示中的32位整数转换为IEEE 754浮点表示 我对此有一些想法,但到目前为止,这些想法都没有奏效。(使用C) 我本来想把整数移位,但后来没能做到 在此基础上构造新的浮点表示 我想我可以把整数转换成二进制,但它有相同的 第一种方法的问题 S表示符号位,其中1为负,0为正 E是二者的补码指数,偏移量为127 M是23位标准化尾数。最高位总是1 因此,它不会被存储 然后寻找二的补码 我将使用num作为一个位数组,我知道这不是标准的C数组范围访问,但您得
我对此有一些想法,但到目前为止,这些想法都没有奏效。(使用C)
我将使用num作为一个位数组,我知道这不是标准的C数组范围访问,但您得到了要点
对于一个基本算法,我们从填写S开始
bit S = 0;
if (num[0] ==1) {
S = 1;
num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1
}
现在我们有了集合S,剩下的数字有了一个标量值
然后我们可以通过找到1的第一个索引,将数字定位到尾数中。这也会让我们找到指数。注意这里的指数总是正的,因为我们不能有分数的int值。(另外,先做一个特例来检查值是否为0,以避免在这里出现无限循环,或者只是适当地修改循环,我很懒)
然后你用S,E,M中的位来构造你的浮点,你说的“将整数转换成二进制”是什么意思?它已经是二进制的了。。。
bit S = 0;
if (num[0] ==1) {
S = 1;
num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1
}
int pos = 1;
signed byte E = 32;
bit[23] M;
while(num[pos] == 0) {
--E;
++pos;
}
int finalPos = min(32, pos+23); //don't get too many bits
M = num[pos+1..finalPos]; //set the mantissa bits