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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端