关于整数和浮点数在内存中的存储

目录

一、整数在内存中的存储

二、浮点数在内存中的存储


一、整数在内存中的存储

  整数在内存中是怎样存储的呢?首先,整数类型在C语言中一共有这么些种:int、short、long int、long long int、unsigned int、在C90标准中添加了unsigned long int、unsigned short int类型,在C99标准中又添加了unsigned long long int 。

  对于int类型来说,创建一个int类型的变量的时候,操作系统为变量开辟四个字节的空间,计算机以二进制的补码形式存储整数,例如,整数7以二进制写是111,因此创建变量a:int a = 7;此时内存中的数据是00000000000000000000000000000111;因为是int类型的变量,是有符号的整数,因此原码,反码,补码相同。

  可以使用printf()函数打印int类型的值。%d指明了在一行中打印整数的位置。%d称为转换说明,它指定了printf()应该用什么样的格式来显示一个值,这一点非常重要,因为在我们的刻板印象里,仿佛最重要的是创建变量是的类型说明,比如创建int a = 7,我们最关心的是int,但是事实上即使我们使用unsigned int a = 7来创建一个变量,而在打印的时候格式化时仍然用%d的话最后所得到的结果却是相同的。

   通常,C语言都假定整型常量是十进制数,但是用八进制和十六进制数时会比较方便,但是计算机如何能够知道某一个数是十进制数还是八进制数或者是十六进制数呢?在C语言中,用特定的前缀表示使用哪种进制,0x或0X前缀表示十六进制值,所以十进制数16表示成十六进制是0x10或0X10,0前缀表示八进制,比如,十进制数16表示成八进制是020。要值得注意的是无论是十进制数也好,还是八进制也好,又亦或是十六进制也好,不会改变数被存储的方式,也就是说,无论把数字写成16,020或0x10,存储该数的方式都相同,因为在计算机内部都是以二进制进行编码的,也就是说,对于同一个数来说,不同的进制最后在计算机内存储的时候均转化为二进制的补码的形式。

二、浮点数在内存中的存储

  相比于整数在内存中的存储,浮点数就相对比较难一点了。首先,我们知道的是对于一个浮点数我们可以把它写成这样的形式:V=(-1)^s  *M *2^E(二进制的形式下),对于32位的浮点数,最高的一位代表的是符号位s,接着的8位是指数E,剩下的23位为有效数字M;对于64位的浮点数,最高的一位是符号位S,接着的11位是指数E,剩下的52位为有效数字M,M是在1到2之间的,(1<=M<2),IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的小数部分,而等到读取的时候只要再加上1就可以了,这样做的目的是增加M的精度。对于E来说,因为我们知道,科学计数法中的E是有可能出现负数的,因此需要加上一个中间数,使保存的数为一个非负数,对于8位的E,这个中间数是127,对于11位的E,这个数是1023。

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值