【问题标题】:decimal to binary 8 bits only using append [closed]仅使用附加十进制到二进制 8 位 [关闭]
【发布时间】:2013-08-21 04:12:52
【问题描述】:

我在将十进制转换为二进制时遇到了问题。如何使用字符串生成器转换二进制从一开始就添加0?

while (num != 0){    
  int digit = num % 2;

  buf.append(digit);
  num = num/2;
}   

System.out.println(num);

【问题讨论】:

  • 您需要以相反的顺序打印buff
  • this post得到一个想法
  • 这不适用于负数-1 % 2 == -1
  • 您所做的不是将十进制转换为二进制。它将数字转换为二进制。在2 字符之外,任何地方都没有小数点。
  • 如果您使用从 0x80000000 开始的掩码并随着每一步向下移动,则无需反向操作即可完成。

标签: java binary


【解决方案1】:

尝试使用字符串生成器类中的 reverse() 方法。大致如下:

buf = buf.reverse();

【讨论】:

    【解决方案2】:

    你可以试试这个

            int num=10;
        StringBuilder buf1=new StringBuilder();
        StringBuilder buf2=new StringBuilder();
        while (num != 0){
            int digit = num % 2;
            buf1.append(digit); // apend 0101 order
            num = num/2;
        }
        String binary=buf1.reverse().toString();// reverse to get binary 1010
        int length=binary.length();
        if(length<8){
           while (8-length>0){
               buf2.append("0");// add zero until length =8
               length++;
           }
        }
        String bin=buf2.toString()+binary;// binary string with leading 0's
        System.out.println(bin);
    

    现场演示here.

    输出

    00001010
    

    你可以对数组做同样的事情,如下所示

        int num=10;
        int[] binArr=new int[8];
        int j=0;
        while (num != 0){
            int digit = num % 2;
            binArr[binArr.length-1-j]=digit;
            num = num/2;
            j++;
        }
        System.out.println(Arrays.toString(binArr).replaceAll("\\,|\\[|\\]",""));
    

    【讨论】:

      【解决方案3】:

      试试这个(对您的原始代码进行最少的修改)...

          int num=8;
          StringBuilder buf = new StringBuilder();
          while (num != 0){    
                int digit = num % 2;
      
                buf.append(digit);
                num = num/2;
              }   
      
              System.out.println(buf.reverse());
      

      【讨论】:

        【解决方案4】:

        十进制数可以通过将数字除以2并记下余数来转换为二进制 例如,如果您将 12 作为十进制数,则二进制数将是 1100

        手动输出:

        2 12

        2 6 0

        2 3 0

        2 1 1

        1

        将十进制转换为二进制的代码是

        class Binary
            {
                public StringBuffer calBinary(int decnum){
        
                  StringBuffer sBuf = new StringBuffer();
                       int temp=0;
                       while(decnum>0){
                              temp = decnum%2;
                              sBuf.append(temp);
                             decnum = decnum / 2;
                       }
                 return sBuf.reverse();
           } }  
        
        
         public class Sri {
        
           public static void main(String[] args) throws IOException {
            System.out.println(" please enter the decimal number to convert into binary");
            BufferedReader br = new   BufferedReader(new InputStreamReader(System.in));
            int num = Integer.parseInt(br.readLine());
        
            Binary K = new Binary();
            StringBuffer result = K.calBinary(decnum);
            System.out.println(result);
                      }
         }
        

        【讨论】:

        • 小数点在哪里???
        【解决方案5】:

        如果只允许追加,则可能应该使用递归:

        String toBinaryString(int num)
        {
            StringBuilder sb = new StringBuilder();
            if (num > 1)
            {
                sb.append(decimalToBinary(num/2));    // or num >> 1
            }
            sb.append((num & 1));
            return sb.toString();
        }
        

        不是世界上最高效的代码,但您确实指定了 StringBuilder 并仅附加。负数的处理留给读者作为练习。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-18
          • 2018-06-24
          • 1970-01-01
          • 2014-03-01
          • 1970-01-01
          • 2012-06-11
          • 1970-01-01
          • 2019-09-09
          相关资源
          最近更新 更多