本帖最后由 Hacker_Jack 于 2017-6-4 10:08 编辑
由于在printf中float 与double均使用%f输出,所以float会先被转化为double的长度再输出(32 bits - > 64 bits),而int不属于float也不属于double,所以请想象一下,在输出精度有限的情况下一个值为1的整数在64位内存中是什么样子,0000............(省略几十个0)......001,而且请看,64位浮点数的存放方式:
以int a=0x40f00000为例,这个可比你那个1要大多了
63位 62~52位 51~0位
1个符号位 11个阶数 52个尾数
从0x0000000040f00000来看
1)符号位是0,表示正
2)阶数是0,表示-1023 + 1023 = 0,用指数表示:1.#*2^-1023,‘#’是代表尾数。
3)尾数就是,0x0000040f00000
4)浮点二进制表示
2#1.0000000000000000000001000000111100000000000000000000*2^(-1023),-1023次方可想而知有多小。
输出精度本来就不高,怎么可能见得到你小数点那么后面的那个1,当然只能看到0
总之就是浮点数内部处理的机制与整型是完全不同的,不要想着拿%f强行输出int。