如何用程序自动打印Int类型十进制负数的二进制码?

首先,通过数学原理,我们可以轻易用程序打印正数的二进制码,方法比较简单,举例如下:

方法一:for循环

public static void toBinary(int a ){
int b = 0;//定义余数赋值为0
String result = "";
for(;;){
b = a % 2;//求余
result = b + result;
a /= 2;
if(a == 0){
System.out.println(result);
break;
}
}
}

方法2:递归

public static void toBinary(int a){
if(a == 0){
return;
}else{
toBinary(a/2);
System.out.print(a%2);
}
}

其次,我们也可以打印一个Int类型的正数取反后的二进制代码,方法如下:

int a ;
int i = 0;
String result = "";
int b = 0;
for(;;){
b = a % 2;
b = b == 0 ? 1 : 0;//取反
result = b + result;//按次排列
i++;
a /= 2;
if(a == 0){
break;
}
}
int j;
for(j=0;j<(32-i);j++){  //高位补全,正数时补0,负数时补1
result = "0" + result;
System.out.println(result);
}

然后,重点来了!我们可以通过 正数的取反来求负数的二进制码打印。原理如下:

负数的二进制码 = 相应正数的二进制反码 + 1
可得负数的二进制码 - 1 = 相应正数的二进制反码
假如负数是-A,相应的二进制码是 erjinzhi(-A),对应正数是A,相应的二进制反码是~A,则 erjinzhi(-A) - 1 = ~A
又因一个数的二进制码 - 1 跟这个数先-1 再求二进制码效果是相同的,即erjinzhi(-A) - 1 =  erjinzhi(-A - 1)= erjinzhi(-(A+1))
可得erjinzhi(-(A+1))= ~A
即:erjinzhi(-A) = ~(A-1)或erjinzhi(A) = ~(-A-1)

例如,要求-34的二进制代码,只要算出~33对应的二进制代码即可,具体计算方法见上。

你可能感兴趣的:(二进制,负数)