了解并清楚整形数据和浮点型数据的存储规则对学好C语言至关重要,那么接下来就谈谈他们的规则吧。
一.整形数据
整形数据在转换成二进制时会有三种形式——原码、反码和补码。
1.原码:就是由整形数据直接转换成的二进制序列。
2.反码:原码符号位(若数据是有符号数,原码最高位是符号位)不变,其他位按位取反。
3.补码:反码加一得补码。
注:正数和无符号整形三码统一,即原码就是反码和补码。
举一个简单的例子:
二.浮点数数据
根据IEEE754规定任何一个二进制浮点数都可以写成(-1)^S*M*2^E,存的时候只存S、M、E即可其中S占一位是0/1,是0时代表是正数,是1时代表是负数,M(1<=M<2)是有效位,在存时会省略1即可提高一位的精度,E是指位数,规定E存无符号数,所以在浮点数为32位时占8位且E=E真实值+127,在浮点数为64位时占11位且E=E真实值+1023。具体的IEEE754规定可参考链接。 IEEE 754_百度百科 (baidu.com)
举个例子:
正常情况:从存的形式获得S,E真=E-127,M补1. 后得出相应的二进制,再转成浮点数。
特殊情况:1.若E为全0,则代表是一个非常小接近于零的数,这时就直接E真=1-127,M前直接补0.
2.若E为全1,则代表是一个非常大的数,但仍按正常情况反向得结果。
整形和浮点型的存储大致就是这样,有兴趣可以在VS等编译器上试一试。欢迎大家指出我的不足。