0

ブール配列 (長さ = 2) を連結して整数に変換し、整数内の個々のビットがブール配列の値を表すようにします。

[false, false] = 0
[false, true] = 1
[true, false] = 2
[true, true] = 3
4

4 に答える 4

15

これはうまくいきます:

int n = (a[0] ? 2 : 0) + (a[1] ? 1 : 0);

より一般的な解決策が必要な場合:

int n = 0, l = a.length;
for (int i = 0; i < l; ++i) {
    n = (n << 1) + (a[i] ? 1 : 0);
}
于 2012-07-17T16:14:46.797 に答える
9

任意の長さの配列の一般的な方法 (ただし、int は 32 ビットであるため、最後の 32 要素のみが違います):

int booleansToInt(boolean[] arr){
    int n = 0;
    for (boolean b : arr)
        n = (n << 1) | (b ? 1 : 0);
    return n;
}
于 2012-07-17T16:27:57.833 に答える
1
int i = (array[0] ? 2 : 0) +  (array[1] ? 1 : 0);

長さ != 2 の一般的な解決策:

public static void main(String[] args) {
    boolean[] array = {true, true, false};
    int number = 0;
    int j = array.length - 1;
    for (int i = 0; i < array.length; i++) {
        if (array[i])
            number += 1 << j--;
    }
}
于 2012-07-17T16:14:29.777 に答える
0
int number = 0;
for(int i = array.length - 1; i >= 0; i--)
{
  if(array[i])
  {  
    int exponent = (array.length - 1 - i)
    number += Math.pow( 2, exponent );
  }
}
于 2012-07-17T16:15:26.893 に答える