数据在内存中的存储_C语言

1 整形在内存中的存储

1.1 了解整形家族

首先,我们先来认识一下整形家族有哪些成员

1.1.1 整形家族有哪些成员?

整形家族的成员有以下

char  1字节(是的,char也属于整形家族)
short 2字节
int   4字节
long  4/8字节

而每个整形都有对应的 有符号类型和无符号类型

char  没有标准是否是有符号还是无符号
signed char 有符号位
unsigned char 无符号位

short 默认有符号位
signed short 有符号位
unsigned short 无符号位

int 默认有符号位
signed int 有符号位
unsigned int 无符号位

long 默认有符号位
signed long 有符号位
unsigned long 无符号位

1.1.2 有符号位和无符号位的区别

只有整形才会区分有符号位和无符号位。有符号位和无符号位的区别在于二进制的最高位是符号位,还是数据位。简单来说,有符号位,就是有正数和负数。无符号位,就代表没有负数,只有正数。而有符号位的最高位如果是1,那么这个数就为负数。如果为0,那么这个数就为正数。如果是无符号位,那么它的最高位无论是0还是1,它都是正数。

比如 有符号数-1的 原码是 10000000 00000000 00000000 00000001
但如果这个数是个无符号数,那么最高位的符号位就会变成数据位,也就是一个非常大的数字。


1.2 整形的原码、反码和补码

1.2.1 原码,反码,和补码之间的关系

无论是原码,反码,还是补码,都是以二进制的形式存在的。原码是一个值最直观的体现,也是人脑最容易理解和计算的表示方式。我们可以很轻松的通过原码知道一个数所对应的值。比如有一个数10,把它转换成2进制就是1010。再在它前面补0,所对应的就是它的原码。一个正数的原码,反码,补码是相同的。但是在负数中,反码是原码按位取反后的结果,补码是反码+1后的结果。

1.2.2 正数的原码,反码,补码

前面我们讲到过,每个整形在内存中所占的 字节大小。而每个字节对应 8 个比特位,存放于内存中。 而一个数的原码,反码,补码,就是由一个个比特位组成。 原码 就是一个值 以二进制展示,有符号位的负数则最高位为1,正数最高位为0 。 比如10的二进制是 1010,而整形是4个字节,有32个比特位。而10 只能用掉4个比特位。剩下的28位怎么办? 那就往前补0!,负数最高位为1,正数最高为为0。

10  是整形,4个字节大小
10  -> 1010000000000 00000000 00000000 00001010 这就是10的原码
 如果是-10呢? 那只需要把最高位变成1就行了,因为这是个有符号整数
 -10
 10000000 00000000 00000000 00001010  这就是-10的原码了
  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值