黑马程序员技术交流社区

标题: 【一上午的劳动成果】负十进制转二进制 [打印本页]

作者: libin    时间: 2015-5-7 12:56
标题: 【一上午的劳动成果】负十进制转二进制
自己做了一个十进制(包括负数)转二进制的代码,请大家进来看看,有什么不对的,请不吝赐教。这里用了@莫里亚蒂的原代码。

/**
* 十进制转换二进制,而且是正序排列
*/
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();
        }
}


作者: 大西洋    时间: 2015-5-7 14:00
{:3_46:}   Professor Moriarty  !




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2