teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

BigIntegerの利用

2021/10/08 09:52

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -16,4 +16,33 @@
16
16
 
17
17
  インクリメントにはビット演算のAND(&)とXOR(^)を使います。`carry`は桁上げ出力。1加算するため`carry`の初期値を1にしています。[加算器](https://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8)
18
18
 
19
- 全パターンを作るには整数をインクリメントするのが一般的ですが、配列を使うということなので加算器をエミュレートしました。
19
+ 全パターンを作るには整数をインクリメントするのが一般的ですが、配列を使うということなので加算器をエミュレートしました。
20
+
21
+ ---
22
+ **整数のインクリメント**
23
+
24
+ 整数のインクリメントの例を追記しておきます。配列のサイズが31を超えることがあるでしょうから、汎用性を考慮して`java.math.BigInteger`を利用する例をあげます。意外と早いです。
25
+
26
+ ```Java
27
+ import java.math.BigInteger;
28
+ import java.util.Arrays;
29
+
30
+ public class BitPattern_ {
31
+
32
+ public static void main(String[] args) {
33
+ bitPattern(15);
34
+ }
35
+
36
+ static BigInteger TWO = BigInteger.ONE.add(BigInteger.ONE);
37
+
38
+ static void bitPattern(int size) {
39
+ int[] A = new int[size];
40
+ var MAX = TWO.pow(size);
41
+ for (var n = BigInteger.ZERO; n.compareTo(MAX) < 0; n = n.add(BigInteger.ONE)) {
42
+ for (int i = 0; i < size; ++i) A[i] = (n.testBit(i)) ? 1 : 0;
43
+ System.out.println(Arrays.toString(A));
44
+ }
45
+ }
46
+
47
+ }
48
+ ```