2010-11-24 24 views
3

おそらくこれは非常に簡単です。2ブール値をintに変換する

私は2つのブール値aとbを持っていれば、どのようにして同等の「バイナリ」数を得ることができますか?

false and false = 0 
false and true = 1 
true and false = 2 
true and true = 3 
+0

を、あなたは '00、01、10、11 'を表示するために欠けていますか?または '0、1、2、3'ですか? –

+0

この質問は、「Java」と「言語に依存しない」の両方にありますか? –

+0

私はFizzBu​​zzの新しいバージョンを作成しました:私は 'i%3 =とi%5 == 0'に基づいてインデックスを取得する必要がありましたhttp://rosettacode.org/wiki/FizzBu​​zz#Using_an_array – OscarRyz

答えて

10
(left ? 2 : 0) + (right ? 1 : 0); 

ないJavaはCのようなブール値を処理しますが、それがない場合かどうかわから:

2*left+right; 
+0

驚くばかり!ありがとう! – OscarRyz

+4

そうではありません。最初は正しいです。 – OscarRyz

+0

三元演算子について教えていただきありがとうございます –

1

または、boolean配列のためのより一般的な解決策:

public static BigInteger asBinary(boolean[] values){ 
    BigInteger sum = BigInteger.ZERO; 
    for(int i = 0; i < values.length; i++){ 
     if(values[i]){ 
      sum = sum.add(
       BigInteger.valueOf(2).pow(values.length - (i+1))); 
     } 
    } 
    return sum; 
} 

(それを参照してくださいon ideone

効率性の理由から、配列サイズが< 32の場合はintを内部処理に使用するのが最善でしょうが、これはデモにすぎませんので、省略します。

0

これはコードよりも数論です。それはあなたの問題の正確な解決策ではありませんが、何が起こっているかについてより深い洞察を与えるかもしれません。

標準進数(ベース10)内の数字は合計のシリーズを使用して表すことができる。

1023×1000 1 + 0 * 100 + 2に相当する* 10 + 3 * 1

これは、 (1 * 10^3)+(0 * 10^1)+(2 * 10^1)+(3 * 10^0)

に相当します。 101のような数は、

1 * 2^2 * 0^2 + 1 * 2^0 = 4 + 0 + 1 = 10進数で表すことができます。

3

これは言語に依存しないとマークしているので、私はScalaでこれを行う方法を投稿したいと思います。 :-)

scala> implicit def boolToAddable(a: Boolean) = new { 
    | def +(b: Boolean): Int = (a, b) match { 
    |  case (false, false) => 0 
    |  case (false, true) => 1 
    |  case (true, false) => 2 
    |  case (true, true) => 3 
    | } 
    | } 
boolToAddable: (a: Boolean)java.lang.Object{def +(b: Boolean): Int} 

scala> false + false 
res0: Int = 0 

scala> false + true 
res1: Int = 1 

scala> true + false 
res2: Int = 2 

scala> true + true 
res3: Int = 3 

は、別の方法としては、上記@デビッドによって提案されたトリック使用することができますので、

scala> implicit def boolToAddable(a: Boolean) = new { 
    | def +(b: Boolean) = (if(a) 2 else 0) + (if(b) 1 else 0) 
    | } 
boolToAddable: (a: Boolean)java.lang.Object{def +(b: Boolean): Int} 
+0

+1私は今日読まなければならなかった最も曖昧な言葉を使用しています。 –

+0

実際には、 'false + false = 0'、' false + true = 1'、 'true + false = 2'、' true + true = 3'のようになります。 – OscarRyz

+0

@Oscar:編集を確認してください。 – missingfaktor

関連する問題