3

このような関数があります。この関数でvoid doSomething(unsigned char buff[50]); やりたいことは、バフがすべてヌルかどうかをすばやく判断することです。

それを行うには、ビット単位またはバッファを使用して結果がゼロかどうかを確認できると考えていました。これは、オンバイトがビット単位の結果または1 になるためです。ゼロの結果は、配列はゼロです。

バッファ全体をループせずに C でこれを行う簡単な方法はありますか? クロスプラットフォームだったらいいのに。

4

3 に答える 3

2

いいえ。ただし、チェックを行う前に 32 ビットまたは 64 ビットの型にキャストすることで、反復回数を減らすことができます。最後に余分な 16 ビットを適切に処理するようにしてください。

于 2012-07-30T02:42:16.777 に答える
1

移植性はありませんが、x86 ではREP SCAS{B,W,D} 命令を使用して x86 でこれを行うことができます。

于 2012-07-30T02:45:25.370 に答える
0

答えの一部は、バッファーの長さにも依存すると思います。

バッファーの長さが 50 バイトの場合 (つまり、バッファーがかなり短く、コンパイル時にその長さがわかっている場合)、はい、ビットごとの OR (および Ignacio が別の回答で述べたようにキャスト) が正しい解決策のようです。

それ以外の場合は、昔ながらの方法 (つまり、各バイトがゼロかどうかをテストする) でループをコーディングし、コンパイラの最適化にループを展開させます。

于 2012-07-30T02:52:34.480 に答える