回答編集履歴
5
fix typo
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
static_assert(N <= ULL_BITS);
|
24
24
|
|
25
|
-
return std::bit_wit
|
25
|
+
return std::bit_width(bs.to_ullong());
|
26
26
|
|
27
27
|
}
|
28
28
|
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
この[`std::bit_wit
|
39
|
+
この[`std::bit_width`関数](https://cpprefjp.github.io/reference/bit/bit_width.html)を活用する前提で、`unsinged long long`ビット幅づつ検査するアルゴリズムを書いてみました。
|
40
40
|
|
41
41
|
...素直に先頭bitからループを回した方がマシかもしれませんね。
|
42
42
|
|
@@ -56,7 +56,7 @@
|
|
56
56
|
|
57
57
|
if constexpr (N <= ULL_BITS) {
|
58
58
|
|
59
|
-
return std::bit_wit
|
59
|
+
return std::bit_width(bs.to_ullong());
|
60
60
|
|
61
61
|
}
|
62
62
|
|
@@ -80,13 +80,13 @@
|
|
80
80
|
|
81
81
|
if (shift <= 0) {
|
82
82
|
|
83
|
-
return std::bit_wit
|
83
|
+
return std::bit_width(bs.to_ullong());
|
84
84
|
|
85
85
|
} else {
|
86
86
|
|
87
87
|
auto tmp = bs >> shift;
|
88
88
|
|
89
|
-
return std::bit_wit
|
89
|
+
return std::bit_width(tmp.to_ullong())) + shift;
|
90
90
|
|
91
91
|
}
|
92
92
|
|
4
use bit_witdh
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
static_assert(N <= ULL_BITS);
|
24
24
|
|
25
|
-
return
|
25
|
+
return std::bit_witdh(bs.to_ullong());
|
26
26
|
|
27
27
|
}
|
28
28
|
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
この[`std::
|
39
|
+
この[`std::bit_witdh`関数](https://cpprefjp.github.io/reference/bit/bit_witdh.html)を活用する前提で、`unsinged long long`ビット幅づつ検査するアルゴリズムを書いてみました。
|
40
40
|
|
41
41
|
...素直に先頭bitからループを回した方がマシかもしれませんね。
|
42
42
|
|
@@ -56,7 +56,7 @@
|
|
56
56
|
|
57
57
|
if constexpr (N <= ULL_BITS) {
|
58
58
|
|
59
|
-
return
|
59
|
+
return std::bit_witdh(bs.to_ullong());
|
60
60
|
|
61
61
|
}
|
62
62
|
|
@@ -80,13 +80,13 @@
|
|
80
80
|
|
81
81
|
if (shift <= 0) {
|
82
82
|
|
83
|
-
return
|
83
|
+
return std::bit_witdh(bs.to_ullong());
|
84
84
|
|
85
85
|
} else {
|
86
86
|
|
87
87
|
auto tmp = bs >> shift;
|
88
88
|
|
89
|
-
return
|
89
|
+
return std::bit_witdh(tmp.to_ullong())) + shift;
|
90
90
|
|
91
91
|
}
|
92
92
|
|
@@ -98,4 +98,4 @@
|
|
98
98
|
|
99
99
|
|
100
100
|
|
101
|
-
Demo: [https://wandbox.org/permlink/E
|
101
|
+
Demo: [https://wandbox.org/permlink/eodeUSQEYbUk4P9O](https://wandbox.org/permlink/eodeUSQEYbUk4P9O)
|
3
update code (optimize)
test
CHANGED
@@ -84,7 +84,7 @@
|
|
84
84
|
|
85
85
|
} else {
|
86
86
|
|
87
|
-
auto tmp =
|
87
|
+
auto tmp = bs >> shift;
|
88
88
|
|
89
89
|
return (ULL_BITS - std::countl_zero(tmp.to_ullong())) + shift;
|
90
90
|
|
@@ -98,4 +98,4 @@
|
|
98
98
|
|
99
99
|
|
100
100
|
|
101
|
-
Demo: [https://wandbox.org/permlink/Z
|
101
|
+
Demo: [https://wandbox.org/permlink/EuZrZkxtI4jFI6VM](https://wandbox.org/permlink/EuZrZkxtI4jFI6VM)
|
2
refinement
test
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
この[`std::countl_zero`関数](https://cpprefjp.github.io/reference/bit/countl_zero.html)を活用する前提で、`unsinged long long`ビット幅づつ検査する
|
39
|
+
この[`std::countl_zero`関数](https://cpprefjp.github.io/reference/bit/countl_zero.html)を活用する前提で、`unsinged long long`ビット幅づつ検査するアルゴリズムを書いてみました。
|
40
40
|
|
41
41
|
...素直に先頭bitからループを回した方がマシかもしれませんね。
|
42
42
|
|
1
add link
test
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
この`std::countl_zero`関数を活用する前提で、`unsinged long long`ビット幅づつ検査するようなロジックを書いてました。
|
39
|
+
この[`std::countl_zero`関数](https://cpprefjp.github.io/reference/bit/countl_zero.html)を活用する前提で、`unsinged long long`ビット幅づつ検査するようなロジックを書いてました。
|
40
40
|
|
41
41
|
...素直に先頭bitからループを回した方がマシかもしれませんね。
|
42
42
|
|