整形在内存中的存储及大小端字节序

整形在内存中的存储

计算机中的有符号数有三种表示方法,原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位用0表示正,1表示负,数值位则不同。

原码

  1. 原码直接将二进制按照正负数的形式转换成二进制就可以了。正数负数同理,只是符号位不同。
  2. 例:数字10表示为原码的形式为0000 0000 0000 0000 0000 0000 0000 1010,数字-10用原码表示为1000 0000 0000 0000 0000 0000 0000 1010。

反码

  1. 反码即将原码的符号位不变,其他位依次按位取反即可。
  2. 例:数字10的反码为0000 0000 0000 0000 0000 0000 0000 1010,而数字-10的反码为1111 1111 1111 1111 1111 1111 1111 0101。

补码

  1. 补码就是在反码的基础上加1
  2. 例:数字10的补码为0000 0000 0000 0000 0000 0000 0000 1010,数字-10的补码为1111 1111 1111 1111 1111 1111 1111 0110。

总结:正数的原码,反码,补码都相同;计算机中存放的都是数字的补码。

大小端字节序

大端模式

数据的地位保存在内存的高地址,数据的地位保存在内存的低地址。
例如手机端采用大端模式。

小端模式

数据的低位保存在内存的低地址,数据的高位保存在内存的高地址。
例如pc端采用小端模式。

int n=0x11223344;
char *p=&n;
*p=0;

此时n的值变为0x11223300,这就是小端模式的一个体现。
因为是低位数据存在低地址中,而计算机在处理数据时是从低地址的数据依次处理,char类型的数据只有一个字节,它在访问n的值时,只能访问到低地址的第一个字节,因此只能将44置为00。

总结

通过了解大小端的字节序模式,帮助我了解了计算机内存处理数据时的方式,对于一些易错题,会有更清晰的理解。我们一般接触小端模式会更多,小端的思想会在代码中体现的比较多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值