多くの文字列の各文字を調べて、許容範囲内にあることを確認するコードのクリティカル セクションがあります。
分岐せずにそのようなフィルタリングを実行する方法はありますか?
...
int i, c;
int sl = strnlen(s, 1023);
for( i = 0; i < sl; i++ ) {
c = s[i];
if( c < 68 || c > 88 )
return E_INVALID;
}
if( 0 == i )
return E_INVALID;
... do something with s ...
ビット演算を使用した何らかのフィルタリングが可能かもしれないと考えていましたが、実際にはこれを機能させる方法がわかりません。95 のビットごとの AND は、範囲を 0 ~ 31、64 ~ 95 にトリムします。if テストを導入せずに進行する方法がわかりません。分岐の無効をスキップするという考えをレンダリングします。