码迷,mamicode.com
首页 > 其他好文 > 详细

原码 补码 反码

时间:2018-11-08 11:38:36      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:val   src   sys   方式   不用   保存   开头   out   存储   

一.原码

正数的原码就是它的本身

假设使用一个字节存储整数,整数10的原码是:0000 1010

负数用最高位是1表示负数

假设使用一个字节存储整数,整数-10的原码是:1000 1010

 

二.反码

正数的反码跟原码一样

假设使用一个字节存储整数,整数10的反码是:0000 1010

负数的反码是负数的原码按位取反(0变1,1变0),符号位不变

假设使用一个字节存储整数,整数-10的反码是:1111 0101

 

三.补码(再次强调,整数的补码才是在计算机中的存储形式。)

正数的补码和原码一样

假设使用一个字节存储整数,整数10的补码是:0000 1010(强调:这是整数10在计算机中存储形式)

负数的补码是负数的反码加1

假设使用一个字节存储整数,整数-10的补码是:1111 0110(强调:这是整数-10在计算机中存储形式)

 

四.在计算机中,为什么不用原码和反码,而是用补码呢?

因为在使用原码,反码在计算时不准确,使用补码计算时才准确。

 

使用原码计算10-10

    0000 1010(10的原码)

  +  1000 1010(-10的原码)

------------------------------------------------------------

    1001 0100(结果为:-20,很显然按照原码计算答案是错误的。)

 

使用反码计算10-10

    0000 1010(10的反码)

  +  1111 0101(-10的反码)

------------------------------------------------------------
    1111 1111  (计算的结果为反码,我们转换为原码的结果为:1000 0000,最终的结果为:-0,很显然按照反码计算答案也是错误的。)

 

使用补码计算10-10

    0000 1010(10的补码)

  +  1111 0110 (-10的补码)

------------------------------------------------------------
    1 0000 0000 (由于我们这里使用了的1个字节存储,因此只能存储8位,最高位(第九位)那个1没有地方存,就被丢弃了。因此,结果为:0)

 

Java的负数采用补码方式存储,那么"8"+"-8"等于多少呢?

 

技术分享图片
如上图所示:数字"8"和"-8"的相加的和为:"100000000",很显然,一个字节只能存储8位,所以,我们要把最前面的那个"1"丢弃掉,这样就得到了"00000000",即8个"0",因此,"8"+"-8"的值为"0"。现在想想发明二进制算法的人真是牛逼啊!连这样的空隙都想出来了!!

 

练习

DEC:十进制

BIN:二进制整数以0b或0B开头;

OCT:八进制以0开头;

HEX:十六进制以0x或0X开头,其中10~15分别以a~f或A~F来表示。

 

技术分享图片

 

 //定义两个8进制的二进制整数

int binValue1 = 0b00001010;

int binValue1 = 0B00001010;

int binValue3 = 0B10000000000000000000000000001010;

System.out.println("binValue1");//输出10

System.out.println("binValue2");//输出10

System.out.println("binValue3");//输出-10

当定义32位的二进制整数时(1个字节占8位),最高位其实是符号位;当符号位是1时,表明它是一个负数,负数在计算机里以补码的形式存在。
所有数字在计算机底层都是以二进制形式存在的,原码是直接将一个数值换算成二进制数。但计算机以补码的形式保存所有的整数。补码的计算规则:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,只是最高位(符号位)保持不变。

原码 补码 反码

标签:val   src   sys   方式   不用   保存   开头   out   存储   

原文地址:https://www.cnblogs.com/hellsino/p/9928008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!