大端 小端 原码 反码 补码 及内存中的表现

小端 和 大端

在内存中存储时,都是从内存的低地址往高地址存,即0x00000000 -> 0xffffffff

以汉字 “严”为例,Unicode码是4E25,需要两个字节存储,一个字节是0x4E,另一个字节是0x25.
低字节先存(该值的起始内存位置,即从低地址单元,先存0x25),叫小端
高字节先存(该值的起始内存位置,即从低地址单元,先存0x4E),叫大端

另一个分辨办法,从该值的起始内存位置(内存起始)位置开始读
顺着我们读习惯的(我们读为4E25),就是大头方式,否则就是小头方式


切记:原码 反码 补码 都是针对整数来说的,小数不使用这种办法

原码 = 符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值


反码 = (正整数) 原码本身
(负整数) 在原码基础上,符号位不变,其余各个位取反

补码 = (正整数) 原码本身
(负整数) 在反码基础上 + 1


-1的原码:  1000  0000 0000 0000 0000 0000 0000 0001
-1的反码:1111  1111  1111  1111  1111  1111  1111 1110
-1的补码:1111  1111  1111  1111  1111  1111  1111 1111
十六进制:   f        f        f        f        f        f        f        f         即0x ff ff ff ff 

-1的实际内存表现: 0x ff ff ff ff 

机器为小端,低位先存,所以最终存储为0x ff ff ff ff,因为各字节都相同,看不出字节序



12的原码:0000 0000 0000 0000 0000 0000 0000 1100
12的反码:0000 0000 0000 0000 0000 0000 0000 1100
12的补码:0000 0000 0000 0000 0000 0000 0000 1100

十六进制:   0       0       0       0       0       0       0       c        即0x 00 00 00 0c

12的实际内存表现: 0x 0c 00 00 00 

机器为小端,低位先存,所以最终存储为0x0c 00 00 00



-12的原码:1000 00000000 0000 0000 0000 0000 1100
-12的反码:1111  11111111  1111  1111  1111  1111  0011 
-12的补码:1111  11111111  1111  1111  1111  1111  0100
十六进制:    f        f        f        f        f        f        f         4         即0x ff ff ff f4

-12的实际内存表现: 0x f4 ff ff ff 

机器为小端,低位先存,所以最终存储为0x f4 ff ff ff



1023的原码:0000 0000 0000 0000 0000 0011 1111 1111 
1023的反码:0000 0000 0000 0000 0000 0011 1111 1111
1023的补码:0000 0000 0000 0000 0000 0011 1111 1111
十六进制:        0       0       0       0       0       3       f       f        即0x 00 00 03 ff

1023的实际内存表现: 0x ff 03 00 00

机器为小端,低位先存,所以最终存储为0x ff 03 00 00



-128的原码:1000 00000000 0000 0000 0000 1000  0000
-128的反码:1111  11111111  1111  1111  1111  0111  1111
-128的补码:1111  11111111  1111  1111  1111  1000  0000
十六进制:        f          f        f          f         f          f         8         0      即0x ff ff ff 80

-128的实际内存表现: 0x 80 ff ff ff 

机器为小端,低位先存,所以最终存储为0x 80 ff ff ff



当只有一个字节的时候:

-128的原码: 1000 0000 

记忆法:-128的原码原本是:1 1000 0000 ,最前面的1表负的,1000 0000表128

但是最前面的1超出了8位限制,所以被舍去了


-128的反码: 0111 1111 

记忆法:-128的反码原本是:1 0111 1111 ,在原码基础上,符号位不变,其余各位取反

但是最前面的1超出了8位限制,所以被舍去


-128的补码: 1000 0000 

记忆法:-128的补码原本是:1 1000 0000 ,仍然是在反码基础上,+1得到

但是最前面的1超出了8位限制,所以被舍去了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值