条件 (if、ループ、?:) を使用せずに、0 以外の数値 (1、-1、123) をすべてのビットセット (-1 または最大の符号なし数値) に変換する最速の方法 (最小のサイクル数) は何ですか?
ビットサイズは既知です。このソリューションは、32 ビットおよび 64 ビットの数値で機能するはずです。
条件 (if、ループ、?:) を使用せずに、0 以外の数値 (1、-1、123) をすべてのビットセット (-1 または最大の符号なし数値) に変換する最速の方法 (最小のサイクル数) は何ですか?
ビットサイズは既知です。このソリューションは、32 ビットおよび 64 ビットの数値で機能するはずです。
C では、ゼロ以外の数値が与えられると 0 になるはずでありn
、すべて 1 のパターンを与える必要があるため、ほとんどのシステムではゼロ以外の数値を -1 に変換します。実装定義ですが、 0 で行うことは頻繁にあると思いますが、それが保証されているかどうかは思い出せません。C++ も似ているはずですが、演算子の から結果への型変換と、演算子の から への型変換の複雑さを理解するのは少し難しく、考慮すべき微妙な詳細がいくつかあります...!n
~0
~!n
!0
1
int
n
bool
!n
int
~
疑わしい場合は、コンパイラ (または関心のあるすべてのコンパイラ - 書くのが特に難しいテスト ケースではありません) で試してみてください。