回答編集履歴

2

追加

2020/10/06 14:50

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -63,3 +63,37 @@
63
63
  }
64
64
 
65
65
  ```
66
+
67
+ 関数にしなくても
68
+
69
+ ```
70
+
71
+ #include <stdio.h>
72
+
73
+ int main()
74
+
75
+ {
76
+
77
+ unsigned u = 0, z;
78
+
79
+ scanf("%u", &u);
80
+
81
+ if ((z = u & 0xffff0000) != 0) u = z;
82
+
83
+ if ((z = u & 0xff00ff00) != 0) u = z;
84
+
85
+ if ((z = u & 0xf0f0f0f0) != 0) u = z;
86
+
87
+ if ((z = u & 0xcccccccc) != 0) u = z;
88
+
89
+ if ((z = u & 0xaaaaaaaa) != 0) u = z;
90
+
91
+ printf("%u\n", u);
92
+
93
+ return 0;
94
+
95
+ }
96
+
97
+ ```
98
+
99
+ でもよかった。

1

ちょっと変更

2020/10/06 14:50

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -2,68 +2,64 @@
2
2
 
3
3
  ```
4
4
 
5
- #include <stdio.h>
5
+ #include <stdio.h>
6
6
 
7
- int BitScanReverse(unsigned word)
7
+ int BitScanReverse(unsigned word)
8
8
 
9
9
  {
10
10
 
11
-   unsigned z;
11
+ unsigned z;
12
12
 
13
-   int n = 0;
13
+ int n = 0;
14
14
 
15
-   if ((z = word & 0xffff0000) != 0) {
15
+ if (word == 0)
16
16
 
17
-     n += 16; word = z;
17
+ return -1;
18
18
 
19
-   }
19
+ if ((z = word & 0xffff0000) != 0) {
20
20
 
21
-   if ((z = word & 0xff00ff00) != 0) {
21
+ n += 16; word = z;
22
22
 
23
-     n += 8; word = z;
23
+ }
24
24
 
25
-   }
25
+ if ((z = word & 0xff00ff00) != 0) {
26
26
 
27
-   if ((z = word & 0xf0f0f0f0) != 0) {
27
+ n += 8; word = z;
28
28
 
29
-     n += 4; word = z;
29
+ }
30
30
 
31
-   }
31
+ if ((z = word & 0xf0f0f0f0) != 0) {
32
32
 
33
-   if ((z = word & 0xcccccccc) != 0) {
33
+ n += 4; word = z;
34
34
 
35
-     n += 2; word = z;
35
+ }
36
36
 
37
-   }
37
+ if ((z = word & 0xcccccccc) != 0) {
38
38
 
39
-   if ((z = word & 0xaaaaaaaa) != 0) {
39
+ n += 2; word = z;
40
40
 
41
-     n += 1; word = z;
41
+ }
42
42
 
43
-   }
44
-
45
-   return word ? n : n - 1;
43
+ return (word & 0xaaaaaaaa) ? n + 1 : n;
46
44
 
47
45
  }
48
46
 
49
47
 
50
48
 
51
- int main()
49
+ int main()
52
50
 
53
51
  {
54
52
 
55
-   unsigned u = 0;
53
+ unsigned u = 0;
56
54
 
57
-   scanf("%u", &u);
55
+ scanf("%u", &u);
58
56
 
59
-   int i = BitScanReverse(u);
57
+ int i = BitScanReverse(u);
60
58
 
61
-   printf("%u\n", i < 0 ? 0u : (1u << i));
59
+ printf("%u\n", i < 0 ? 0u : (1u << i));
62
60
 
63
-   return 0;
61
+ return 0;
64
62
 
65
63
  }
66
64
 
67
-
68
-
69
65
  ```