回答編集履歴

5

fix typo

2021/02/24 08:39

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  static_assert(N <= ULL_BITS);
24
24
 
25
- return std::bit_witdh(bs.to_ullong());
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_witdh`関数](https://cpprefjp.github.io/reference/bit/bit_witdh.html)を活用する前提で、`unsinged long long`ビット幅づつ検査するアルゴリズムを書いてみました。
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_witdh(bs.to_ullong());
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_witdh(bs.to_ullong());
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_witdh(tmp.to_ullong())) + shift;
89
+ return std::bit_width(tmp.to_ullong())) + shift;
90
90
 
91
91
  }
92
92
 

4

use bit_witdh

2021/02/24 08:39

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  static_assert(N <= ULL_BITS);
24
24
 
25
- return ULL_BITS - std::countl_zero(bs.to_ullong());
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::countl_zero`関数](https://cpprefjp.github.io/reference/bit/countl_zero.html)を活用する前提で、`unsinged long long`ビット幅づつ検査するアルゴリズムを書いてみました。
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 ULL_BITS - std::countl_zero(bs.to_ullong());
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 ULL_BITS - std::countl_zero(bs.to_ullong());
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 (ULL_BITS - std::countl_zero(tmp.to_ullong())) + shift;
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/EuZrZkxtI4jFI6VM](https://wandbox.org/permlink/EuZrZkxtI4jFI6VM)
101
+ Demo: [https://wandbox.org/permlink/eodeUSQEYbUk4P9O](https://wandbox.org/permlink/eodeUSQEYbUk4P9O)

3

update code (optimize)

2021/02/24 08:39

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  } else {
86
86
 
87
- auto tmp = (bs & mask) >> shift;
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/ZHnBxroJYfEuXQnv](https://wandbox.org/permlink/ZHnBxroJYfEuXQnv)
101
+ Demo: [https://wandbox.org/permlink/EuZrZkxtI4jFI6VM](https://wandbox.org/permlink/EuZrZkxtI4jFI6VM)

2

refinement

2021/02/24 05:37

投稿

yohhoy
yohhoy

スコア6191

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

2021/02/24 05:25

投稿

yohhoy
yohhoy

スコア6191

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