原码反码补码基本概念
-
数据在计算机内部是以补码的形式储存的
-
数据分为有符号数和无符号数
- 无符号数都为正数,由十进制直接转换到二进制直接存储(其实也是该十进制的补码)即可。 有符号数用在计算机内部是以补码的形式储存的。( 正数的最高位是符号位0,负数的最高位是 符号位1。 对于正数:反码==补码==原码。 对于负数:反码==除符号位以外的各位取反。补码=反 码+1)
- 正数的首位地址为0,其原码是由十进制数转换到的二进制数字
- 负数的首位地址为1,其原码后面的位也为10进制数转换过去的二进制数字,都是用补码方式表示 有符号数的。
-
在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要 使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.
原码, 反码, 补码是计算机原理的术语。说白了就是为了理解计算机2进制用的。对于C/C++来 说,是和数据类型有关的。 -
原码
- 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
原码:[+1]0000 0001
原码:[-1]1000 0001
- 反码
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
原码:[+1]0000 0001 反码:0000 0001
原码:[-1]1000 0001 反码:1111 1110
>+ 可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计 算.
- 补码
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
原码:[+1]0000 0001 反码:0000 0001 补码:0000 0001
原码:[-1]1000 0001 反码:1111 1110 补码:1111 1111
>+ 对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
-1在内存中存储细节
- 在64为计算机中,-1的原码、反码、补码如下
-1原码 1000 0000 0000 0000 0000 0000 0000 0001
-1反码 1111 1111 1111 1111 1111 1111 1111 1110
-1补码 1111 1111 1111 1111 1111 1111 1111 1111