java反码补码原码作用_Java学习--反码 原码 补码简析

关于课上实验中对小数的处理中出现的问题涉及到原码,反码,补码的问题,所以在网上进行了一下搜索。

在原码,反码,补码中的解释可得知,无论是哪一种码,能够表示的数的范围是-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;

此时表达正确,故计算机是用补码表示加减。

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

packagewei;public classWei {public static intgetString(String a)

{int a1=0;for(int i=0;i<4;i++)

{if(a.charAt(3-i)==‘1‘)

a1+=(1<

}//if(a.charAt(0)==‘1‘)//a1=-a1;

returna1;

}public static int add(int a,intb)

{int c=0;

c+=(((a+b)&8)>>3!=1)?((a+b)&7):-((a+b)&7);returnc;

}public static voidmain(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)));

}

}

实验截图如下:

20181005204937138047.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值