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

回答編集履歴

15

関数名修正

2020/09/16 16:04

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
10
10
  return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
11
11
  }
12
- int countGreaterThan1(unsigned int bits)
12
+ int countGreaterThanOrEqualTo1(unsigned int bits)
13
13
  {
14
14
  bits |= (bits & 0b00010010010010010010010010010010)>> 1;
15
15
  bits |= (bits & 0b00100100100100100100100100100100)>> 2;
@@ -18,7 +18,7 @@
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
19
19
  return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
20
20
  }
21
- int countGreaterThan2(unsigned int bits)
21
+ int countGreaterThanOrEqualTo2(unsigned int bits)
22
22
  {
23
23
  bits >>= 1;
24
24
  bits |= bits >> 1;
@@ -49,7 +49,7 @@
49
49
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
50
50
  return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
51
51
  }
52
- int countGreaterThan1(unsigned int bits)
52
+ int countGreaterThanOrEqualTo1(unsigned int bits)
53
53
  {
54
54
  bits |= (bits & 0b00000010010010010010010010010010) >> 1;
55
55
  bits |= (bits & 0b00000100100100100100100100100100) >> 2;
@@ -58,7 +58,7 @@
58
58
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
59
59
  return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
60
60
  }
61
- int countGreaterThan2(unsigned int bits)
61
+ int countGreaterThanOrEqualTo2(unsigned int bits)
62
62
  {
63
63
  bits |= bits >> 1;
64
64
  bits >>= 1;

14

ビット演算修正

2020/09/16 16:04

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  {
7
7
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
8
8
  bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
9
- bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
9
+ bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
10
10
  return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
11
11
  }
12
12
  int countGreaterThan1(unsigned int bits)
@@ -46,7 +46,7 @@
46
46
  {
47
47
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
48
48
  bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
49
- bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
49
+ bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
50
50
  return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
51
51
  }
52
52
  int countGreaterThan1(unsigned int bits)

13

コード修正

2020/09/15 19:16

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
8
8
  bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
9
9
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
10
- return (bits & 0b00000000000000000000000000111111) + (bits >> 24) & 0b00000000000000000000000000111111;
10
+ return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
11
11
  }
12
12
  int countGreaterThan1(unsigned int bits)
13
13
  {
@@ -16,7 +16,7 @@
16
16
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
17
17
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
19
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
19
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
20
20
  }
21
21
  int countGreaterThan2(unsigned int bits)
22
22
  {
@@ -25,7 +25,7 @@
25
25
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
26
26
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
27
27
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
28
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
28
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
29
29
  }
30
30
  int count2(unsigned int bits)
31
31
  {
@@ -35,19 +35,19 @@
35
35
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
36
36
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
37
37
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
38
- return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111);
38
+ return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111));
39
39
  }
40
40
  ```
41
41
  すみません、上記コードは30bit(a[9])まで使用していました。
42
42
  上位bitが0で埋まっていれば同じですが、27bitまでの場合は以下コードで。
43
- どちらのコードも上位ビットが0なら`(bits >> 24)`のあとの`& 0b~`は不要です。
43
+ どちらのコードも上位ビットが0なら`bits >> 24`のあとの`& 0b~`は不要です。
44
44
  ```C++
45
45
  int sum(unsigned int bits)
46
46
  {
47
47
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
48
48
  bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
49
49
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
50
- return (bits & 0b00000000000000000000000000111111) + (bits >> 24) & 0b00000000000000000000000000111111;
50
+ return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
51
51
  }
52
52
  int countGreaterThan1(unsigned int bits)
53
53
  {
@@ -56,7 +56,7 @@
56
56
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
57
57
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
58
58
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
59
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
59
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
60
60
  }
61
61
  int countGreaterThan2(unsigned int bits)
62
62
  {
@@ -65,7 +65,7 @@
65
65
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
66
66
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
67
67
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
68
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
68
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
69
69
  }
70
70
  int count2(unsigned int bits)
71
71
  {
@@ -75,6 +75,6 @@
75
75
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
76
76
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
77
77
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
78
- return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111);
78
+ return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111));
79
79
  }
80
80
  ```

12

不定値の場合のコード修正

2020/09/15 18:48

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
8
8
  bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
9
9
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
10
- return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
10
+ return (bits & 0b00000000000000000000000000111111) + (bits >> 24) & 0b00000000000000000000000000111111;
11
11
  }
12
12
  int countGreaterThan1(unsigned int bits)
13
13
  {
@@ -16,7 +16,7 @@
16
16
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
17
17
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
19
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
19
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
20
20
  }
21
21
  int countGreaterThan2(unsigned int bits)
22
22
  {
@@ -25,7 +25,7 @@
25
25
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
26
26
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
27
27
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
28
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
28
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
29
29
  }
30
30
  int count2(unsigned int bits)
31
31
  {
@@ -35,18 +35,19 @@
35
35
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
36
36
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
37
37
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
38
- return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
38
+ return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111);
39
39
  }
40
40
  ```
41
41
  すみません、上記コードは30bit(a[9])まで使用していました。
42
- 28-30bitが0で埋まっていれば同じですが、不定値可能性があるなら以下コードで。
42
+ 上位bitが0で埋まっていれば同じですが、27bitまで場合は以下コードで。
43
+ どちらのコードも上位ビットが0なら`(bits >> 24)`のあとの`& 0b~`は不要です。
43
44
  ```C++
44
45
  int sum(unsigned int bits)
45
46
  {
46
47
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
47
48
  bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
48
49
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
49
- return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
50
+ return (bits & 0b00000000000000000000000000111111) + (bits >> 24) & 0b00000000000000000000000000111111;
50
51
  }
51
52
  int countGreaterThan1(unsigned int bits)
52
53
  {
@@ -55,7 +56,7 @@
55
56
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
56
57
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
57
58
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
58
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
59
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
59
60
  }
60
61
  int countGreaterThan2(unsigned int bits)
61
62
  {
@@ -64,7 +65,7 @@
64
65
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
65
66
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
66
67
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
67
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
68
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
68
69
  }
69
70
  int count2(unsigned int bits)
70
71
  {
@@ -74,6 +75,6 @@
74
75
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
75
76
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
76
77
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
77
- return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
78
+ return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111);
78
79
  }
79
80
  ```

11

28-30bitを計算対象としていたので修正コードを追記

2020/09/15 18:46

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -37,4 +37,43 @@
37
37
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
38
38
  return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
39
39
  }
40
+ ```
41
+ すみません、上記コードは30bit(a[9])まで使用していました。
42
+ 28-30bitが0で埋まっていれば同じですが、不定値の可能性があるなら以下コードで。
43
+ ```C++
44
+ int sum(unsigned int bits)
45
+ {
46
+ bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
47
+ bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
48
+ bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
49
+ return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
50
+ }
51
+ int countGreaterThan1(unsigned int bits)
52
+ {
53
+ bits |= (bits & 0b00000010010010010010010010010010) >> 1;
54
+ bits |= (bits & 0b00000100100100100100100100100100) >> 2;
55
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
56
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
57
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
58
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
59
+ }
60
+ int countGreaterThan2(unsigned int bits)
61
+ {
62
+ bits |= bits >> 1;
63
+ bits >>= 1;
64
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
65
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
66
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
67
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
68
+ }
69
+ int count2(unsigned int bits)
70
+ {
71
+ bits ^= 0b00000010010010010010010010010010;
72
+ bits |= (bits & 0b00000010010010010010010010010010) >> 1;
73
+ bits |= (bits & 0b00000100100100100100100100100100) >> 2;
74
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
75
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
76
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
77
+ return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
78
+ }
40
79
  ```

10

2以上を求める際の&演算を一回削減

2020/09/15 18:36

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -20,7 +20,6 @@
20
20
  }
21
21
  int countGreaterThan2(unsigned int bits)
22
22
  {
23
- bits &= 0b00110110110110110110110110110110;
24
23
  bits >>= 1;
25
24
  bits |= bits >> 1;
26
25
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);

9

2以上を求める際の&演算を一回削減

2020/09/15 18:20

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -22,7 +22,7 @@
22
22
  {
23
23
  bits &= 0b00110110110110110110110110110110;
24
24
  bits >>= 1;
25
- bits |= (bits & 0b00010010010010010010010010010010) >> 1;
25
+ bits |= bits >> 1;
26
26
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
27
27
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
28
28
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);

8

不要なビット演算を除去

2020/09/15 17:47

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
8
8
  bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
9
9
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
10
- return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
10
+ return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
11
11
  }
12
12
  int countGreaterThan1(unsigned int bits)
13
13
  {
@@ -16,7 +16,7 @@
16
16
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
17
17
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
19
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
19
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
20
20
  }
21
21
  int countGreaterThan2(unsigned int bits)
22
22
  {
@@ -26,7 +26,7 @@
26
26
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
27
27
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
28
28
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
29
- return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
29
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
30
30
  }
31
31
  int count2(unsigned int bits)
32
32
  {
@@ -36,6 +36,6 @@
36
36
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
37
37
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
38
38
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
39
- return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111));
39
+ return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
40
40
  }
41
41
  ```

7

2の要素数について追記

2020/09/15 17:35

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -28,4 +28,14 @@
28
28
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
29
29
  return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
30
30
  }
31
+ int count2(unsigned int bits)
32
+ {
33
+ bits ^= 0b00010010010010010010010010010010;
34
+ bits |= (bits & 0b00010010010010010010010010010010) >> 1;
35
+ bits |= (bits & 0b00100100100100100100100100100100) >> 2;
36
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
37
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
38
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
39
+ return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111));
40
+ }
31
41
  ```

6

ビット演算修正

2020/09/15 17:30

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -11,8 +11,8 @@
11
11
  }
12
12
  int countGreaterThan1(unsigned int bits)
13
13
  {
14
- bits |= bits >> 1;
14
+ bits |= (bits & 0b00010010010010010010010010010010)>> 1;
15
- bits |= bits >> 2;
15
+ bits |= (bits & 0b00100100100100100100100100100100)>> 2;
16
16
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
17
17
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
@@ -22,7 +22,7 @@
22
22
  {
23
23
  bits &= 0b00110110110110110110110110110110;
24
24
  bits >>= 1;
25
- bits |= bits >> 1;
25
+ bits |= (bits & 0b00010010010010010010010010010010) >> 1;
26
26
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
27
27
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
28
28
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);

5

ビット演算修正

2020/09/15 17:27

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  int countGreaterThan1(unsigned int bits)
13
13
  {
14
14
  bits |= bits >> 1;
15
- bits |= bits >> 1;
15
+ bits |= bits >> 2;
16
16
  bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
17
17
  bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);

4

ビット演算修正

2020/09/15 17:18

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -5,17 +5,17 @@
5
5
  int sum(unsigned int bits)
6
6
  {
7
7
  bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
8
- bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00001111000000001111000000001111);
8
+ bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
9
- bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00001111000000000000000000001111);
9
+ bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
10
10
  return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
11
11
  }
12
12
  int countGreaterThan1(unsigned int bits)
13
13
  {
14
14
  bits |= bits >> 1;
15
15
  bits |= bits >> 1;
16
- bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
16
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
17
- bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000011000000000011000000000011);
17
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
18
- bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
18
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
19
19
  return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
20
20
  }
21
21
  int countGreaterThan2(unsigned int bits)
@@ -23,9 +23,9 @@
23
23
  bits &= 0b00110110110110110110110110110110;
24
24
  bits >>= 1;
25
25
  bits |= bits >> 1;
26
- bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
26
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
27
- bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000011000000000011000000000011);
27
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
28
- bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
28
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
29
29
  return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
30
30
  }
31
31
  ```

3

スペル修正

2020/09/15 16:57

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00001111000000000000000000001111);
10
10
  return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
11
11
  }
12
- int countGraterThan1(unsigned int bits)
12
+ int countGreaterThan1(unsigned int bits)
13
13
  {
14
14
  bits |= bits >> 1;
15
15
  bits |= bits >> 1;
@@ -18,7 +18,7 @@
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
19
19
  return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
20
20
  }
21
- int countGraterThan2(unsigned int bits)
21
+ int countGreaterThan2(unsigned int bits)
22
22
  {
23
23
  bits &= 0b00110110110110110110110110110110;
24
24
  bits >>= 1;

2

2以上カウント追記

2020/09/15 16:33

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -18,4 +18,14 @@
18
18
  bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
19
19
  return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
20
20
  }
21
+ int countGraterThan2(unsigned int bits)
22
+ {
23
+ bits &= 0b00110110110110110110110110110110;
24
+ bits >>= 1;
25
+ bits |= bits >> 1;
26
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
27
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000011000000000011000000000011);
28
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
29
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
30
+ }
21
31
  ```

1

1以上カウント追記

2020/09/15 16:32

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -9,4 +9,13 @@
9
9
  bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00001111000000000000000000001111);
10
10
  return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
11
11
  }
12
+ int countGraterThan1(unsigned int bits)
13
+ {
14
+ bits |= bits >> 1;
15
+ bits |= bits >> 1;
16
+ bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
17
+ bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000011000000000011000000000011);
18
+ bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
19
+ return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
20
+ }
12
21
  ```