有符号的原码、反码、补码详解

2019-02-28  本文已影响0人  K9999_b426

有符号数 signed %d

符号位+数值位(例如:int i = +7;)

int 类型占4个字节,1个字节占8个位,int占32个比特位

7 根据8421码得到二进制原码

(0b00000000000000000000000000000111)

int 类型的表数范围:

计算机中存储有符号数的时候是按照补码的形式存进去的。

正数的原码、反码、补码都一样

负数的原码、反码、补码就不一样了

-7的原码(计算机是原码变成补码存进去)

(0b10000000000000000000000000000111)

-7:存储到计算机的流程

原码:0b10000000000000000000000000000111

反码:-1=0b10000000000000000000000000000110

补码:0b11111111111111111111111111111001(符号位保持不变)

-7:拿取出来的流程

​ 补码:0b11111111111111111111111111111001

​ 反码:-1=0b11111111111111111111111111111000

​ 原码:0b10000000000000000000000000000111(符号位保持不变)

内存机构的最小寻址单位——字节,Byte,

1Byte==8bit(00000000)1字节最大的数是(11111111)对应的10进制数是:

根据8421码对应的数进行相加

128+64+32+16+8+4+2+1

得到255

signed int存储的值范围

最大值:4个字节 32个最大的比特位

最大值原码:11111111111111111111111111111111

反码:-1=00000000000000000000000000000000

最少值的补码:01111111111111111111111111111111=2^31-1

最少值:4个字节 32个最小的比特位

最少值原码:00000000000000000000000000000000

反码:-1=10000000000000000000000000000000 (减去1只是将符号位反转)

最大值的补码:11111111111111111111111111111111=-2^31-1

结论:

      反码是将原码进行减一操作,补码,原码都可以是进行反转操作

计算机存储数据流程将原码——反码——再补码(存储是补码是反转)

计算机拿取数据流程将补码——反码——再原码(拿取是原码是反转)

上一篇 下一篇

猜你喜欢

热点阅读