CString test;
test.Format(_T("%.7f"),0)以后 test的值是随机的,为什么不是0.0000000呢?
而改成test.Format(_T("%.7f"),0.0)就行了,为什么不能用int而非要转换成float?谁能解释一下原理啊?谢谢
test.Format(_T("%.7f"),0)以后 test的值是随机的,为什么不是0.0000000呢?
而改成test.Format(_T("%.7f"),0.0)就行了,为什么不能用int而非要转换成float?谁能解释一下原理啊?谢谢
test= "675838832892320530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000"
float也是32位,不但有一位存储符号,还需要存储小数点的位置(具体怎么存的不清楚,几位也不知道)。你的问题就是直接把int类型的32位按照float的格式去读取,所以会出问题
test.Format(_T("%.7f"),(float)0)
但就是想知道为什么不能隐式转换
目前已知的所有的C/C++编译器都是按照IEEE制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的float的规格:float
共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
每8位分为一组,分成4组,分别是A组、B组、C组、D组。
每一组是一个字节,在内存中逆序存储,即:DCBA