Probablement c'est extrêmement facile.Convertit deux booléens en un int
Si j'ai deux booléens, a et b, comment puis-je obtenir le nombre "binaire" équivalent?
false and false = 0
false and true = 1
true and false = 2
true and true = 3
Probablement c'est extrêmement facile.Convertit deux booléens en un int
Si j'ai deux booléens, a et b, comment puis-je obtenir le nombre "binaire" équivalent?
false and false = 0
false and true = 1
true and false = 2
true and true = 3
Ou une solution plus générale pour un tableau de booléens:
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;
}
(Voir le travail on ideone)
Pour des raisons d'efficacité, il serait probablement préférable d'utiliser ints pour le traitement interne si la taille du tableau est < 32, mais ce n'est qu'une démo, donc je vais passer cette étape.
Ceci est plus la théorie des nombres que le code; Ce n'est pas une solution exacte à votre problème, mais cela pourrait vous donner une meilleure idée de ce qui se passe.
Un certain nombre en notation standard décimal (base 10) peut être représentée en utilisant une série de sommes:
1023 est équivalente à 1 * 1000 + 0 * 100 + 2 * 10 + 3 * 1
Ceci est équivalent à (1 * 10^3) + (0 * 10^2) + (2 * 10^1) + (3 * 10^0)
Dans le cas de binaire (base 2), un nombre comme 101 peut être représenté comme suit:
1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 4 + 0 + 1 = décimal 5.
Puisque vous avez marqué ceci comme langue-agnostique, je signalerais comment faire ceci dans 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
Sinon, vous pouvez utiliser l'astuce suggérée par-dessus @ David:
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 pour utiliser le langage le plus obscur que j'ai dû lire aujourd'hui. –
En fait, il devrait être: 'false + false = 0',' false + true = 1', 'true + false = 2' et' true + true = 3' – OscarRyz
@Oscar: Vérifiez l'édition. – missingfaktor
Alors, vous êtes désireux d'afficher '00, 01, 10, 11'? Ou '0, 1, 2, 3'? –
Comment cette question peut-elle être à la fois "java" et "language-agnostic"? –
J'ai créé une nouvelle version de FizzBuzz avec la réponse :) J'avais besoin d'un index basé sur 'i% 3 = et i% 5 == 0' http://rosettacode.org/wiki/FizzBuzz#Using_an_array – OscarRyz