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);
}
}
|
|