计算机之原码、反码、补码

1、原码

对于有符号数:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其他位表示值。java

例如:5blog

原码的二进制:0000 0101源码

例如:-5基础

原码的二进制:1000 0101二进制

对于无符号数:原码就是真值。im

例如:5      源码的二进制:0000 0101d3

在计算机中,能够区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型;因此无符号数没法表示负数数据

2、反码

正数的反码:是其自己db

例如:5img

原码:0000 0101

反码:0000 0101

负数的反码:在其原码的基础上, 符号位不变,其他各个位取反.

例如:-5

原码:1000 0101

反码:1111 1010

3、补码

正数的补码:是其自己

例如:5

原码:0000 0101

反码:0000 0101

补码:0000 0101

负数的补码:在其原码的基础上, 符号位不变, 其他各位取反, 最后+1. (即在反码的基础上+1)

例如:-5

原码:1000 0101

反码:1111 1010

补码:=反码+1=1111 1010 +1 =1111 1011=251

例如:-1

原码:1000 0001

反码:1111 11110

补码:1111 11111 =255

4、补码转源码

正数:补码与原码相等 因此无需转换

负数补码转源码:在补码的基础上, 符号位不变, 其他各位取反, 最后+1. (即在反码的基础上+1)

补码:1111 1101

反码:1000 0010

原码:1000 0011=-3

5、计算机采用补码的意义

计算机一般用补码来表示有符号数,计算机的一个数据能够看做是有符号数,也能够看做无符号数的,也就是说计算机并不知道你存的是有符号数仍是无符号数,并且所作的运算并不须要管你存的是什么数

  • 缘由:简化计算机基本运算电路,使加减法都只须要用加法电路实现,用加法替代减法。例如:2-1 =2+(-1);
  • 目的:为了简化计算机基本运算电路,使加减法都只须要经过加法电路实现,也就是让减去一个正数或加上一个负数这样的运算能够用加上一个正数来代替。因而改变负数存储的形式,存储成一种能够直接当成正数来相加的形式,这种形式就是补码。

一、原码计算加减法:加法正确 ,可是减法的结果错误

二、反码计算加减法:加法与减法结果都是正确的

三、使用补码计算加减法:加法与减法结果都是正确的,而且解决了-0 的问题

6、证实计算机中使用的是补码

 使用java语言证实:因为正数的原码与补码相同,因此这里咱们使用负数证实  byte b=-3;

 

 

 

 由结果可知JAVA代码右位移1位的结果与咱们使用补码计算的结果一致

相关文章
相关标签/搜索