Java 将两个布尔值转换为整数

Java 将两个布尔值转换为整数,java,language-agnostic,Java,Language Agnostic,也许这非常容易 如果我有两个布尔数,a和b,我如何得到等价的“二进制”数 不确定java是否能像C一样处理布尔值,但如果能: 2*left+right; 或一组布尔值的更一般的解决方案: public static BigInteger asBinary(boolean[] values){ BigInteger sum = BigInteger.ZERO; for(int i = 0; i < values.length; i++){ if(values

也许这非常容易

如果我有两个布尔数,a和b,我如何得到等价的“二进制”数

不确定java是否能像C一样处理布尔值,但如果能:

2*left+right;

或一组布尔值的更一般的解决方案:

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;
}
公共静态BigInteger为二进制(布尔[]值){
BigInteger总和=BigInteger.0;
对于(int i=0;i
(见其工作)


出于效率考虑,如果数组大小小于32,则最好使用ints进行内部处理,但这只是一个演示,因此我将跳过它。

这更多的是数论而不是代码;这并不是你问题的精确解决方案,但它可能会让你对正在发生的事情有更深入的了解

标准十进制表示法(以10为基数)中的数字可以用一系列和表示:

1023相当于1*1000+0*100+2*10+3*1

这相当于 (1*10^3)+(0*10^2)+(2*10^1)+(3*10^0)

在二进制(基数2)的情况下,类似101的数字可以表示为:


1*2^2+0*2^1+1*2^0=4+0+1=十进制5。

既然您已将此标记为语言不可知,我将在Scala中发布如何执行此操作。:-)

或者,您可以使用上面@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}

那么,您想显示
00、01、10、11
?或者
0,1,2,3
?这个问题怎么可能同时是“java”和“语言不可知论”?我已经创建了一个新版本的FizzBuzz,答案是:)我需要基于
I%3=和I%5==0来获取索引,我很高兴。如果你真的想玩得开心,用谷歌搜索“达夫的设备”。+1来使用我今天读过的最晦涩的语言。实际上应该是:
false+false=0
false+true=1
true+false=2
true+true=3
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;
}
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}