1

ビットを 10 進数に変換できるプログラムを作成する必要があります。ビットを入力するたびに、0.0 しか出力されません。理由がわかりません。私はそれが信じられないほど単純であることを知っていますが、私はそれを見ていません。どんな助けでも大歓迎です。

import java.lang.Math;
import java.util.Scanner;


public class Lab1 {
    static double number = 0;

    public static double toDec(String num) {

        char[] charArray = num.toCharArray();

        for(int i = 0; i<charArray.length;i++) {
            if(charArray[i] == 1) {
                number = Math.pow(2, charArray.length-i);
            }
        }

        return number;


    }


    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int bit;
        String bitString;

        System.out.println("Please enter a bit");
        bit = keyboard.nextInt();
        bitString = Integer.toString(bit);


        System.out.println(toDec(bitString));



    }

}
4

3 に答える 3

6

と比較しましたが、リンゴとオレンジ、具体的には a と を比較してcharArray[i]います。1charint

'1'代わりに char と比較してください。

if(charArray[i] == '1') {

また、 ;numberでローカル変数を作成することもできます。toDecそのメソッドの外に存在する必要はありません。

さらに、これは 1 ビットが設定されている場合にのみ機能します。現在、1 つのビットのみで作業していますが、これを複数のビットで動作するように変更する場合は、別の変更が必要です。

numberが呼び出されるたびに上書きtoDecし、条件はtrueです。以前の値を で上書きするのではなく、numberに追加することをお勧めします。+==

于 2013-09-05T19:02:30.417 に答える
1

Integer#parseInt(String str, int radix)は仕事をします:

public static Integer toDec(String num) {
  return Integer.parseInt(num, 2);
}
于 2013-09-05T19:18:04.940 に答える
0

したがって、51 である文字列 "110011" を取得する場合。ビッグエンディアンの場合、処理するビット数を決定する必要があります。したがって、文字列を読み取り、長さが 6 桁の場合、最初のビットを左に 6 桁シフトする必要があることがわかります。

int l = 6;
long value = 0;

for( int i = 0; i < l; i++ )
{
   int bit = ( charArray[i] == "1" ) ? 1 : 0;

   l = l + ( bit << l-i );
}

フロートの場合、基本的にはインタープリターを構築してビットをデコードする必要がありますが、フロートはバイナリで表されます。

于 2013-09-05T19:18:15.077 に答える