首页 原码、反码、补码
文章
取消

原码、反码、补码

原码

原码由第一位的符号位和后面的数值位构成,如32位二进制中:

数值 原码
$1$ $0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0001$
$-1$ $1000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0001$
$2147483647$ $0111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111$
$-2147483647$ $1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111$
$0$ $0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000$
$1000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000$

所以32位二进制用原码表示的范围是 $[-2147483647, 2147483647]$,其中 $0$ 有两种表示方法,因为 $0$ 是不分正负的

反码

正数的反码是其原码本身,负数的反码是符号位不变,数值位的每一位都取反,如32位二进制中:

数值 反码
$1$ $0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0001$
$-1$ $1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1110$
$2147483647$ $0111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111$
$-2147483647$ $1000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000$
$0$ $0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000$
$1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111$

所以32位二进制用反码表示的范围是 $[-2147483647, 2147483647]$,其中 $0$ 有两种表示方法

补码

正数的补码是其原码本身,负数的补码是其反码加 $1$,如32位二进制中:

数值 反码
$1$ $0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0001$
$-1$ $1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111$
$2147483647$ $0111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111\ 1111$
$-2147483647$ $1000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0001$
$0$ $0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000$
$-2147483648$ $1000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0000$

所以32位二进制用反码表示的范围是 $[-2147483648, 2147483647]$,其中 $0$ 只有一种表示方法

本文由作者按照 CC BY 4.0 进行授权

P4071排列计数

如何在Flash被淘汰后仍能打开swf文件