数据的存储

数据的存储

#整型在内存中的存储
一, C语言中的类型大致分为三大类:
1.存整数的:char,short,int,long,longlong,int*,int[2]…
2.存浮点数的:float,double,float*,double[2]…
3.结构体
二, 整数在内存中的存储主要考虑两方面:
1, 字节序和补码
(字节序我们将其分为大端序和小端序,不同的cpu的字节序可能存在差异)
我们可以通过一段代码来验证我们的主机的字节序:
在这里插入图片描述
大端序:高位放在低地址上
小端序:低位放在低地址上(可以通过小小小来记忆)
2,原码反码补码
正数的补码为其本身
负数取反加1得到反码,负数在内存中的存储为其反码
反码再次取反加1得到原码
三,类型转换问题
此类问题对我们处理数据来说相当重要:
数据在类型转换过程中很容易出现溢出问题:
数据的大小超出其类型所能表示的范围就会发生溢出
1,首先我们必须了解一下类型转化规则:
如果从高位数据转变为低位数据时,会引发高位截断
如果从低位数据转变为高位数据时,在高位处补符号位
2,让我们通过一些例子来了解一下溢出问题:
例一:
在这里插入图片描述
总结:当char 类型的-128要转变为unsigned int类型的数据,先是进行高位补符号位,再把它的二进制序列直接当做unsigned int来计算
当char类型的+128要转变为unsigned int时,首先要明确+128已经超出表示范围,因此他就会溢出,符号位此时变为了1,这样计算机就默认他为一个负的128,因此-128的后续转变为unsigned int与上述操作相同。
溢出是非常常见的,只要此时数据的大小超出了其类型所能表示的范围,它的符号位就会变为1,因此最终我们看到的结果会为一个负数。
例二:

总结:在此循环中,因为我们定义的i为unsigned int,因此i> =0这个条件始终满足,当i为0时,再减1的话其二进制序列会变为全1,因此代码会开始从unsigned int能表示的最大数开始每次减1。
从这个例子中我们要得知在写代码时我们根据情况要尽量避免使用unsigned int
四,浮点数中存在的误差:
IEEE754规定了浮点数在内存中存储的规则。我们先利用一个例子来说明浮点数存储在计算机中的误差:
在这里插入图片描述
总结:造成这种误差的原因与浮点数在内存中的存储息息相关。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值