0

10進数から2進数の会話をするための宿題があります。これは私が持っているコードです:

int num = 0;
int temp = 0;

Scanner sc = new Scanner(System.in);
num = sc.nextInt();

//System.out.print(""+ num%2+ (num%2)%2);
while(num != 0) {
  temp = num;
  System.out.print(""+(int) temp % 2);
  num = num / 2;    
}

正常に動作していますが、MSBではなくLSBとして出力されます。

例えば:

35
110001

しかし、私はそれが必要100011です。

それを元に戻すための関数や方法を使用することはできません。私はそれを配列や文字列などに入れて魔法をかけることができることを知っています。ただし、使用できるのはwhileループ、モジュロ、および印刷のみです。

助言がありますか?

4

4 に答える 4

4

最下位ビットから開始する代わりに、最上位ビットから開始できます。

int i = 35;

// find where the top bit is.
int shift = 0;
while (i >>> (shift + 1) > 0) shift++;

// print from the top bit down
while (shift >= 0)
    System.out.print((i >>> shift--) & 1);

プリント i = 35

100011

i = -35 のプリント

11111111111111111111111111011101
于 2012-11-02T14:11:18.747 に答える
2

数字は本当に右から左です (なぜ「アラビア数字」と呼ばれているのでしょうか?)。数値の最下位桁は最後の桁です。

最下位から最上位までの 2 進数を生成します。それらを保存してから、最も重要なものから最も重要でないものへと逆の順序で印刷する必要があります。

List<Integer>これには aまたは anを使用してみてくださいint[]

于 2012-11-02T14:11:50.143 に答える
0

見つけた数字をそのまま出力しないでください。出力を段階的に構築し、最後に出力します。

public static void main(String[] args)
{
    int num = 0;
    int temp = 0;

    Scanner sc = new Scanner(System.in);
            num = sc.nextInt();

    int place = 1;
    int output = 0;

    while(num != 0) {
       temp = num % 2;
       num = num / 2;    

       output += (place*temp);
       place *=10;
    }

    System.out.print(""+output);
}   

大きな数値または負の数値を処理するには、これを変更する必要がある場合があります。

于 2012-11-02T14:27:59.933 に答える
0

1 つの回避策は次のとおりです。

  int indx = 0;
  if(num<0){
      indx =31;
      num = Integer.MAX_VALUE+num+2;
  }else{
      while((int)Math.pow(2, indx) <= num){
           indx++; 
      }
       indx--;//get the highest index
  }
   System.out.print(""+1);//print the highest bit
   num = num % (int)Math.pow(2, indx);
   indx--;
   //print the bits right to left
   for(int i = indx; i >=0; i--){
     if(Math.abs(num)<2){
       System.out.print(""+num);
     }else if((int)Math.pow(2, i) >= num){
        System.out.print(""+0);
     }else{
       num = num % (int)Math.pow(2, i); //get the remaining value
       System.out.print(""+1);
     }
   }
于 2012-11-02T14:15:29.547 に答える