一分钟教会你原码补码和反码

先了解一下概念:

符号位:二进制的最高位,标识正数和负数。(0表示为正,1表示为负)

数值位:符号位后面几位(所以八进制表示的数值位只有7位)

例:

20的原码:0 0010100,此处蓝色的0为符号位,即值为正;后面的7位红色数为数值位。

-20的原码:1 0010100。此处蓝色的1为符号位,即值为负;后面的7位红色数为数值位。

一.正数的原码,反码,补码。

以66为例。

原码:0 1000010

反码:0 1000010

补码:0 1000010
即:正数的原码,反码,补码是一样的

二.负数的原码,反码,补码(转换中符号位不变)

1.负数的原码→反码。

在原码中,符号位不变,数值位按位取反。

-66的原码:1 1000010

-66的反码:1 0111101

-16的原码:1 0010000

-16的反码:1 1101111

2.负数的反码→补码。

在反码中,符号位不变,末位+1。

-66的反码:1 0111101

-66的补码:1 0111110

-16的反码:1 1101111

-16的补码:1 1110000

你可能感兴趣的:(c语言)