long赋值给float会有问题吗?

比如:

long l1 = 4294967297; //二进制为1 00000000 00000000 00000000 00000001
float f1 = l1;
var str1 = ToBinString(BitConverter.GetBytes(f1));
long l2 = (long)f1;
Console.WriteLine($"str1:{str1}, l2:{l2}"); //str1:01001111 10000000 00000000 00000000, l2:4294967296

 

 

转为float的二进制过程中的相关步骤:

4) 转为科学计数法:

  1.0000000 00000000 00000000 00000000 1*(232),最后的9个bit 00000000 1超出了23bit会做舍入处理后截掉

5) 最终二进制:

  0(1001 1111)(0000000 00000000 00000000)

6) 再转为十进制:

  1.0000000 00000000 00000000*(232) >>> 小数点右移32位 >>> 1 00000000 00000000 00000000 00000000 = 4294967296

跟原来的值差了1

 

posted @   yanghui01  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示