计算机原码,反码,补码以及十进制,二进制和十六进制转换 作者:七棵菜 日期:2022-11-30 栏目:计算机分类:1 人气:351 ### 机器数和真值 #### 机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011。 那么,这里的 00000011 和 10000011 就是机器数。 #### 真值 计算机中的机器数对应的真实的十进制值就是真数。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。 所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 ### 原码, 反码, 补码的基础概念和计算方法. 对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式。 #### 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如8位二进制: ``` `+1` 原码:0000 0001 `-1` 原码: 1000 0001 ``` 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: ``` [1111 1111 , 0111 1111] ==> [-127 , 127] ``` #### 反码 反码的表示方法是: > 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. ``` `+1` 原码: 00000001, 反码: 00000001 `-1` 原码: 10000001, 反码: 11111110 ``` #### 补码 补码的表示方法是: > 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. **即在反码的基础上+1** ``` `+1` 原码: 00000001, 反码: 00000001, 补码: 00000001 `-1` 原码: 10000001, 反码: 11111110, 补码: 11111111 ``` ### 二、八、十、十六进制转换 #### 各种进制的用途 - 10进制,当然是便于我们人类来使用,我们从小的习惯就是使用十进制,这个毋庸置疑。 - 2进制,是供计算机使用的,1,0代表开和关,有和无,机器只认识2进制。 - 16进制,内存地址空间是用16进制的数据表示, 如0x8049324。 #### 二进制与十进制之间的转换 ##### 十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。  ##### 二进制转十进制 方法为:把二进制数按权展开、相加即得十进制数。  #### 二进制与十六进制之间的转换 ##### 二进制转十六进制 方法为:4位二进制数按权展开相加得到1位八进制数。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。  ##### 十六进制转二进制 方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。  #### 十进制与八进制与十六进制之间的转换 ##### 十进制转八进制或者十六进制 有两种方法: - 间接法:把十进制转成二进制,然后再由二进制转成八进制或者十六进制。 - 直接法:把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。如下图:  ##### 八进制或者十六进制转成十进制 方法为:把八进制、十六进制数按权展开、相加即得十进制数  标签: 上一篇:如何使用mvn命令导入依赖 下一篇:常用的javascript数组方法 随便看看 2024-02-19 PHP7 运算符“??” 和“?:”的区别 2022-11-30 Linux 后台运行命令 2022-11-25 关于我们 2022-11-30 centos一键系统安装lnmp集成环境 2022-11-30 linux 生成 ssh 公钥 留言