Java 将两个布尔值转换为整数
也许这非常容易 如果我有两个布尔数,a和b,我如何得到等价的“二进制”数 不确定java是否能像C一样处理布尔值,但如果能: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
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}