C99 準拠の C では、プリプロセッサ マクロが定義されていないと仮定します。これは、符号なし整数の最大値を設定するより移植性の高い方法です。
unsigned x = -1;
また
unsigned y = ~0;
数年前、 unsigned intを設定すると、あいまいなシステムである種のトラップ表現-1
があるため、より移植性が高いと主張するスレッドに出くわしたことを思い出します。しかし、それが真実であるとはもう確信が持てません。~0
符号なし変数に負の値を設定する動作が C99 標準 (つまり、モジュロ値など) で明確に定義されていることは知っていますが、? の反転は0
どうですか?
さらに、両方の操作が同等に移植可能であり、コンパイラの最適化がないと仮定すると、どちらの操作がクロックサイクルの点でより効率的でしょうか?