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

回答編集履歴

2

副作用→弊害に変更(「副作用」という言葉を避けた)

2020/09/15 18:22

投稿

hidezzz
hidezzz

スコア1248

answer CHANGED
@@ -87,7 +87,7 @@
87
87
  int xwork;
88
88
 
89
89
  xwork = x;
90
- #if 0 /* 0になった時点で(xから取り出すものがなくなった時点で)終了できるが副作用があるかも */
90
+ #if 0 /* 0になった時点で(xから取り出すものがなくなった時点で)終了できるがなんか弊害があるかも */
91
91
  while ( xwork != 0 )
92
92
  #else
93
93
  for ( int i = 0 ; i < 9 ; ++i )

1

最後の例の演算を減らした。

2020/09/15 18:22

投稿

hidezzz
hidezzz

スコア1248

answer CHANGED
@@ -73,7 +73,7 @@
73
73
  }
74
74
  ```
75
75
 
76
- あと、可読性は落ちますが、提示コードの場合ifを通る回数を減らせる思います。
76
+ あと、可読性は落ちますが、ifを通る回数を減らしたり、xをxworkにコピーして破壊しながら3ビットずつ取り出すればちょっと速くなるかもしれません
77
77
  ```cpp
78
78
  #include <iostream>
79
79
 
@@ -84,11 +84,19 @@
84
84
  int over1 = 0;
85
85
  int over2 = 0;
86
86
  int equal2 = 0;
87
+ int xwork;
87
88
 
89
+ xwork = x;
90
+ #if 0 /* 0になった時点で(xから取り出すものがなくなった時点で)終了できるが副作用があるかも */
91
+ while ( xwork != 0 )
92
+ #else
88
- for ( int i = 0 ; i < 9 ; ++i ) {
93
+ for ( int i = 0 ; i < 9 ; ++i )
94
+ #endif
95
+ {
89
96
  int v;
90
97
 
91
- v = (x >> i * 3) & 0b111;
98
+ v = xwork & 0b111;
99
+ xwork >>= 3;
92
100
 
93
101
  // 各値の合計
94
102
  sum += v;
@@ -116,4 +124,5 @@
116
124
 
117
125
  return 0;
118
126
  }
127
+
119
128
  ```