整型和浮点型的存储方式

目录

前言

1.整型

1.1 源码、反码、补码

1.2整型的存储

2.浮点型

2.1 浮点型存储

2.2例子

总结


前言

本文简要介绍以下c语言中整型和浮点型的存储方式


  

1.整型

1.1 源码、反码、补码

        源码就是一个数的二进制表示.第一位表示符号位,负数为1,正数为0。

        反码是源码的符号位不变,其余为取反。

        补码就是反码加1。

        举个例子。数字5转换为二进制

        源码    0000 0000 0000 0000 0000 0000 0000 0101

        反码    0111 1111 1111 1111 1111 1111 1111 1010

        补码    0111 1111 1111 1111 1111 1111 1111 1011

1.2整型的存储

        计算机中整型在内存中存的是一个数的补码。下面看一个例子。

int main()
{
	int a = -1;
	printf("%u", a);
	return 0;
}

       

        在上个例子中,将-1以无符号数打印的结果不是-1,而是一个非常大的数,这是因为变量a中存储的是-1 的补码,再以无符号的方式解读。-1的补码通过上面计算方式可得1111 1111 1111 1111 1111 1111 1111 1111 ,原来第一个符号为是1,表示负数。但以无符号的方式打印则第一位也是数据位,于是整个数就是一个正数,其值就是将1111 1111 1111 1111 1111 1111 1111 1111转换为十进制。

2.浮点型

2.1 浮点型存储

        根据IEEE754的标准,一个二进制浮点数都可以表示为以下这种形式。

        (-1)^S * M * 2^E
      (-1)^S表示符号位,S = 0可以表示正数,S = 1则为负数
        M表示有效数字,如M中放着1011,那么就表示数字1.1011
        E表示小数点移动位数,如-1,表示小数点左移一位。2,小数点右移两位,类似科学计数法。

        

        于是一个浮点数7.0二进制为111.0,可转化为(-1)^ 0* 1.11 * 2^2。其中S=0,M=11,E=2,

在将这三个值存储起来。

        一个单精度浮点型总共32位,第1位放S,后面8放E,剩下23位放M。如果是双精度浮点型的话,S、E、M分别为1、11、52位,总共64位。

        需要注意的是E不是直接就存放进去的,如果E的位数是8位存放的值是E+127,如果E的位数是11位存放的值是E+1023,其中127和1023称为中间数。

        还有两种特殊情况

        E全为0,那么真实值就是-127,相当于小数点向左移动127位,这时表示的数非常小相当于0,于是E全为0可表示±0。这时M中的数不在加上第一位的1,而是直接用0.xxxxxx表示。

        E全为1,如果有效数字全为0,则表示±无穷大。

2.2例子

int main()
{
	int n = 5.0;
	float *pFloat = (float *)&n;
	*pFloat = 5.0;
	printf("num的值为:%d\n", n);
	return 0;
}

        将5.0以浮点的方式存入n再以有符号整数的方式打印出来,最终打印结果不是5.0。

        整个过程是这样。5.0写作二进制为101.0,那么由上可知,S=0,M=01,E = 1000 0001(2+127=129),所以n中存的二进制为0 10000001 01000000000000000000000;第一位为0表示正数,10000001 01000000000000000000000转化为十进制即为1084227584。


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了整型和浮点型的数字如何在计算机中存储,

理解好数据的存储也是学习c语言的重要部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值