自己做了一个十进制(包括负数)转二进制的代码,请大家进来看看,有什么不对的,请不吝赐教。这里用了@莫里亚蒂的原代码。
/**
* 十进制转换二进制,而且是正序排列
*/
import java.util.*;
public class Demo9 {
public static void toBin(int num)
{
if (num > 0) //如果输入的十进制数为正整数,则执行以下步骤
{
StringBuffer sb = new StringBuffer();
while (num > 0)
{
sb.append(num % 2);
num = num / 2;
}
System.out.println(sb.reverse());
if (1 > 0)
{
xianShi();
}
}
else //如果输入的十进制数为负数,则执行以下步骤
{
//先把负数变成正整数,取得正数的二进制代码
num=-num;
StringBuffer sb = new StringBuffer();
while (num > 0)
{
sb.append(num % 2);
num = num / 2;
}
System.out.println(sb.reverse());
//
char[] bi=new char[32];
//把二进制变成字符串
String pi=(sb.reverse()).toString();
//再把字符串分解成字符,赋给数组arry
char[] arry=pi.toCharArray();
//将二进制弄成32位,前面用0代替
for(int i=31;i>=0;i--){
if(arry.length>(31-i))
{
bi[i]=arry[31-i];
}
else{
bi[i]='0';
}
}
//取反
for(int i=0;i<32;i++){
if(bi[i]=='0'){
bi[i]='1';
}else{
bi[i]='0';
}
}
//加1
for(int i=31;i>=0;i--){
if(bi[i]=='0'){
bi[i]='1';
break;
}else{
bi[i]='0';
}
}
for(int i=0;i<32;i++){
System.out.print(bi[i]);
}
System.out.println();
}
}
public static void xianShi()
{
Scanner s = new Scanner(System.in);
System.out.println("十进制数");
int x = s.nextInt();
String qq=Integer.toBinaryString(x);
System.out.println(qq);
toBin(x);
}
public static void main(String[] args)
{
xianShi();
}
}
|