1

条件 (if、ループ、?:) を使用せずに、0 以外の数値 (1、-1、123) をすべてのビットセット (-1 または最大の符号なし数値) に変換する最速の方法 (最小のサイクル数) は何ですか?

ビットサイズは既知です。このソリューションは、32 ビットおよび 64 ビットの数値で機能するはずです。

4

2 に答える 2

0

C では、ゼロ以外の数値が与えられると 0 になるはずでありn、すべて 1 のパターンを与える必要があるため、ほとんどのシステムではゼロ以外の数値を -1 に変換します。実装定義ですが、 0 で行うことは頻繁にあると思いますが、それが保証されているかどうかは思い出せません。C++ も似ているはずですが、演算子の から結果への型変換と、演算子の から への型変換の複雑さを理解するのは少し難しく、考慮すべき微妙な詳細がいくつかあります...!n~0~!n!01int nbool!nint~

疑わしい場合は、コンパイラ (または関心のあるすべてのコンパイラ - 書くのが特に難しいテスト ケースではありません) で試してみてください。

于 2013-11-05T18:01:13.653 に答える