本文在Win10,Cygwin64下测试。
结论:
一、
给float型变量赋十六进制的值时(如0xffffffff),都被认为是正数,当数值的二进制表示很长,则会发生截断,赋值和截断规律为:float变量可保存从左边第一个“1”开始的24位,且第24位是“1”时,只要第25位是“1”,那么截断时第24位加1(进位)。如果第24位是“0”,截断时需要第25、26位都是“1”,24位才会加1(进位)。
二、计算机内存中以补码保存整数(正数的补码是其本身,负数的补码是反码加1),因此
给char、short、
int、long等有符号变量赋值时,若所赋的值使该类型变量第1位为1,则变量得到负值。
如: char a=0xff; 则a=-1,0xff被认为是补码。
三、int(32位)转float时,是按二进制原码转换,第1位符号位保存到float的符号位;余下的31位赋值给float,保存到float的尾数部分,赋值和截断规律同上述。