1.什么是源码补码反码
- 机器数
一个数在计算机中的表示形式是二进制的话,这个数其实就叫机器数。
机器数通常是带有符号的(指有正数和负数之分),计算机用最高位存放符号,这个 bit 一般叫做符号位。 正数的符号位为 0, 负数的符号位为 1。比如,十进制中的数 +7 ,计算机字长为8位,转换成二进制就是 0 0 0 0 0 1 1 1(一个 byte 有 8bit,有效的取值范围是 -128 ~ +127)。
如果是 -7 ,就是 1 0 0 0 0 1 1 1 。一个存储的二进制码分原码、反码、补码,下面我们就来介绍一下什么是原码、反码、补码
补充:
计算机底层使用二进制形式的补码来计算和存储数据
1.原码
十进制数据的二进制表现形式就是原码,原码最左边的一个数字就是符号位,0为正,1为负。
例如:56 -> 0 0 1 1 1 0 0 0
左边第一位为符号位,其他位为数据位。
一个 byte 有 8bit,最大值是 0 1 1 1 1 1 1 1 (+127),最小值是 1 1 1 1 1 1 1 1 (-128)
在计算机中之所以使用二进制来表示原码是因为逻辑简单,对于电路来说只有开或者关两种状态,用二进制是在方便不过的了。如果使用的进制是十进制、八进制或者十六进制的话,电路没有办法表示那么多的状态
正数计算
使用原码对正数进行计算不会有任何问题的
例如:5 + 2
0 0 0 0 0 1 0 1
+ 0 0 1 0
-----------------
0 0 0 0 0 1 1 1
把这个结果转成十进制刚好就等于 7,完全正确无误
负数计算
但是如果是负数的话,那计算的结果就会大相径庭了
我们拿 -56 这个数字来举例,它的原码是 1 0 1 1 1 0 0 0 ,减一之后,就会变成 1 0 1 1 0 1 1 1 ,这个数转成十进制就是 -55。计算前是 -56,减一之后正确的结果应该是 -57(1 0 1 1 1 0 0 1)才对,居然还越减越大了</