A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.Scanner;
class Demo3_GetBinary {
public static void main(String[] args) {
  /*
  分析:
   1,正数的原码,反码,补码都是一样的;
   2,0的都是0;
   3,负数
    反码是其绝对值的正数原码取反;
    补码是反码加1;
  */
  //int x = -7;
  Scanner sc = new Scanner(System.in);
  p("请输入你要查看的整数:");
  int x = sc.nextInt();

  //我们做出来的结果是倒着的,瞅着不爽,我们找个容器用一下
  //因为字符缓冲区有一个反转的方法,reverse()
  StringBuffer sb = new StringBuffer();

  int n = x; //定义的临时变量,如果为负数,需要一个记录初始的负数
  
  if (x > 0) {//正数的原码,反码,补码都是一样的;
   for (int i = 31; i >= 0 ;i-- ) { //一个int数是4个字节,占32位
    //sb.delete(0,sb.length());  //先清空一下
    //p(x % 2);      //转换成2进制
    if (i % 8 == 0) {//为了美化格式
     //p(" ");
     sb.append((x % 2) + " ");
    }else {
     sb.append(x % 2);
    }
    x = x >>> 1;     //无符号右移1位,保证补位是0

   }
   //从容器把数据拿出来
   sb.reverse();  //进行反转
   p(n + " 的原码是:" + sb + "\r\n");
   p(n + " 的反码是:" + sb + "\r\n");
   p(n + " 的补码是:" + sb + "\r\n");
//################################################################
  } else if(x < 0) {//负数
   //原码
   x = -n  ;//负数的原码和正数的原码只是符号位是1,只要改变了符号位就好
   
   for (int i = 31; i > 0 ;i-- ) {
    //p(x % 2);
    if (i % 8 == 0) {//为了美化格式
     sb.append( (x % 2) + " ");
    }else {
     sb.append(x % 2);
    }
   
    x = x >> 1;
   
   }
   //p("1");
   sb.append("1"); //补上符号位
   
   sb.reverse(); //反转
   p(n + " 的原码是:" + sb + "\n");

   
//---------------------------------------------------------------------
   
   //反码
   x = n - 1;//知道了补码,求反码的时候,只要再-1,就可以了
   //p("反码是:");
   //这里需要说明的是,因为sb有数据,所以需要先将sb的数据全部清空再存入
   sb.delete(0,sb.length());
   for (int i = 31; i > 0 ;i-- ) {//所以这里
    //p((x % 2));
   
    if (i % 8 == 0) {//为了美化格式
     sb.append( (x % 2) + " ");
    }else {
     sb.append(x % 2);
    }
    x = x >>> 1;
   }
   sb.append("1"); //补上符号位
   sb.reverse();
   p(n + " 的反码是:" + sb + "\r\n");

//-----------------------------------------------------------------
   //补码:
   //p("补码是:"); //负数从电脑上直接得到的就是补码
   x = n;
   //这里需要说明的是,因为sb有数据,所以需要先将sb的数据全部清空再存入
   sb.delete(0,sb.length());
   for (int i = 31; i > 0 ;i-- ) {
    //p((x % 2));//
    int a = x % 2;
    //p(a & 1);  //因为一个负数 % 一个数结果还是负数,看着不爽,如果 & 1 就变过来了
   
    if (i % 8 == 0) {//为了美化格式
     sb.append((a & 1)+ " ");
    }else {
     sb.append(a & 1);
    }
    x = x >>> 1;
   }
   sb.append("1"); //补上符号位
   sb.reverse();
   p(n + " 的补码是:" + sb + "\r\n");

   
   
//############################################################
  }else {//x = 0
   p("0的原码,反码,转码都是0");
   
  }
}
public static void p(Object o) {
  System.out.print(o);
}

}

5 个回复

倒序浏览
这下更懵逼了
回复 使用道具 举报

着是一个工具,只要用就好了,不是让你看源代码的,你自己做完后,和这个对一下就好了
回复 使用道具 举报
您已经是面试过的了么。
回复 使用道具 举报
Belive丶Me 发表于 2016-5-13 21:33
您已经是面试过的了么。

不是,基础班ing
回复 使用道具 举报
听起来还不错哟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马