二进制的原码,反码以及补码介绍

原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码:表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码:表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

 

首先需要明确是java中是用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。

正数补码为其本身;

负数补码为其绝对值各位取反加1;(这里还记得“若干年”前C语言老师说的一句“各位取反,末位加一”。。。)

 

例如:

+21,其二进制表示形式是00010101,则其补码同样为00010101

-21,按照概念其绝对值为00010101,各位取反为11101010,再加1为11101011,即-21的二进制表示形式为11101011

 

步骤:

1、byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为01111111

可以借助等比数列的求和公式,得到其十进制表示形式为(2^7-1)即127

2、最大正数是01111111,那么最小负是10000000(最大的负数是11111111,即-1)

 

需要强调的是,由于正数的原码、补码都一样,求其十进制大小的时候无需转换(所以也容易产生混淆),

 

而负数则不同。此处的最大正数01111111和最小负数10000000都是补码形式(java的语言规定。。)

 

3、10000000是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。10000000减1得01111111然后取反10000000

因为负数的补码是其绝对值取反,即10000000为最小负数的绝对值,而10000000的十进制表示是128,所以最小负数是-128

4、由此可以得出byte的取值范围是-128到+127

 

对于负数而言,需要掌握两种情况:知道其大小(十进制值),求补码;知道其补码,求其大小。

 

一个十进制负数转换成其二进制补码表示的时候,步骤为:

 

  负数--->正数(取绝对值)---->二进制补码---(末位减一,各位取反)>二进制原码

 

  -128          128                        1000 0000                 0111 1111                      1000 0000

 

package ejz;

public class CeShiCLSASS {

 public static void main(String[]args)

 {

  int a=15;

  int b=2;

  System.out.println(a&b);

  System.out.println(a|b);

  System.out.println(a^b);

 }

本篇博客文字部分摘自博主leodowhat

文章链接:https://www.cnblogs.com/miaoxiaonao/

转载于:https://www.cnblogs.com/zl00/p/11555247.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值