计算机编码知识
本文了解计算机编码基础知识
什么是机器码 (原码)?
- 一个数在计算机中的表示形式是二进制,这个数其实就叫机器数
- 机器数是带符号的,在计算机用一个数的最高位存放符号,正数为 0, 负数为 1。比如,十进制中的数 +7 ,计算机字长为 8 位,转换成二进制就是 00000111。如果是 -7 ,就是 10000111
什么是反码?
- 原码除最高位其余位取反,规定:正数的反码和原码相同,负数的反码是原码除了符号位,其余为都取反
- 如: -1 的原码为 1 0000001 ,反码为 1 1111110
什么是补码?
- 整数的补码是其本身,负数的补码为其反码加一 ,所以,负数转化为反码需两个步骤, 第一,先转化为反码,第二: 把反码加
- 如: -1 的反码为 1 1111110,则补码为 1111 1111
为什么要区分原码、反码、补码?
用补码存储,在计算的时候,如果是减法,可以把减法看成加法
数值 1 的二进制是 0000 0001,如果直接使用加法、减法有以下结果
1
2
3
4
5
6
7
8
90000 0001
+ 0000 0001
—————————
0000 0010 ……………… 2
0000 0001
- 0000 0001
—————————
1000 0010 ……………… -2为了避免减法错误,使反码 将减法操作替换为加法操作,结果如下
1
2
3
40000 0001
+ 1111 1110
—————————
1111 1111 ……………… 再转化为原码就是 1000 0000 = -0反码带来另一个问题是出现 - 0,为了避免这个问题,使补码 ,结果如下
1
2
3
40000 0001
+ 1111 1111
—————————
1 0000 0000 ……………… 由于 char 为 8 位,最高位 1 被丢弃结果为 0 ,运算正确