码迷,mamicode.com
首页 > 编程语言 > 详细

Java学习--反码 原码 补码简析

时间:2018-10-05 21:02:05      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:自动生成   方法   ret   ack   har   i++   system   表示   测试   

关于课上实验中对小数的处理中出现的问题涉及到原码,反码,补码的问题,所以在网上进行了一下搜索。
在原码,反码,补码中的解释可得知,无论是哪一种码,能够表示的数的范围是-2^(位数-1)-1至2^(位数-1)-1;

原码:二进制的在最高位数若为1, 则表示这个数为负数,最高位数为0,表示负数,其值大小就是最高位数除外的二进制转换成10进制的大小,最高位数表示符号;

反码:二进制的在最高位数若为1, 则表示这个数为负数,最高位数为0,表示负数,正数的值就是最高位数除外的二进制转换成10进制的大小,负数的值是正数按位取反的值。

补码:二进制的在最高位数若为1, 则表示这个数为负数,最高位数为0,表示负数,正数的值就是最高位数除外的二进制转换成10进制的大小,负数的值是正数按位取反的值在加上1所得的值。

假如有一计算机,是4位,那对这4位进行计算。通过了解,可以取-7至7的值。
假如有两个数5,-1,计算他们的加法;

原码:
5/2=2...1;
2/2=1...0;
1/2=0...1;
即5用二进制表示0101;
-1用二进制表示1001;
原码5+(-1)则表示 1110;
表示-6;
所以原码不能用来计算

反码:
5用二进制表示0101;
-1用二进制表示1110;
两数相加,0011(位数超过4的部分舍去);
表示3;
反码同样不能用来计算。

补码:
5用二进制表示0101;
-1用二进制表示1111;
两数相加,用二进制表示:0100;
表示4;
此时表达正确,故计算机是用补码表示加减。

 

在程序中测试的代码如下:

package wei;

public class Wei {

    public static int getString(String a)
    {
        int a1=0;
        for(int i=0;i<4;i++)
        {
            if(a.charAt(3-i)==‘1‘)
                a1+=(1<<(i));
        }
//        if(a.charAt(0)==‘1‘)
//            a1=-a1;
        return a1;
        
    }
    public static int add(int a,int b)
    {
        int c=0;
        c+=(((a+b)&8)>>3!=1)?((a+b)&7):-((a+b)&7);
        return c;
    }
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        String a=new String("0101");
        String b=new String("1001");
        System.out.println("原码表示5+(-1)="+add(getString(a),getString(b)));
        b="1110";
        System.out.println("反码码表示5+(-1)="+add(getString(a),getString(b)));
        b="1111";
        System.out.println("补码码表示5+(-1)="+add(getString(a),getString(b)));
    }

}

实验截图如下:

技术分享图片

 

Java学习--反码 原码 补码简析

标签:自动生成   方法   ret   ack   har   i++   system   表示   测试   

原文地址:https://www.cnblogs.com/halone/p/9745757.html

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