おそらくこれは非常に簡単です。2ブール値をintに変換する
私は2つのブール値aとbを持っていれば、どのようにして同等の「バイナリ」数を得ることができますか?
false and false = 0
false and true = 1
true and false = 2
true and true = 3
おそらくこれは非常に簡単です。2ブール値をintに変換する
私は2つのブール値aとbを持っていれば、どのようにして同等の「バイナリ」数を得ることができますか?
false and false = 0
false and true = 1
true and false = 2
true and true = 3
または、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を内部処理に使用するのが最善でしょうが、これはデモにすぎませんので、省略します。
これはコードよりも数論です。それはあなたの問題の正確な解決策ではありませんが、何が起こっているかについてより深い洞察を与えるかもしれません。
標準進数(ベース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進数で表すことができます。
これは言語に依存しないとマークしているので、私は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}
+1私は今日読まなければならなかった最も曖昧な言葉を使用しています。 –
実際には、 'false + false = 0'、' false + true = 1'、 'true + false = 2'、' true + true = 3'のようになります。 – OscarRyz
@Oscar:編集を確認してください。 – missingfaktor
を、あなたは '00、01、10、11 'を表示するために欠けていますか?または '0、1、2、3'ですか? –
この質問は、「Java」と「言語に依存しない」の両方にありますか? –
私はFizzBuzzの新しいバージョンを作成しました:私は 'i%3 =とi%5 == 0'に基づいてインデックスを取得する必要がありましたhttp://rosettacode.org/wiki/FizzBuzz#Using_an_array – OscarRyz