加算や除算などの多くの基本演算は、ビット単位の演算子のみを使用して C でも実装できることを知っています。等号 (>=) を使用して同じことを行うにはどうすればよいですか?
if (x >= 0) {
...
}
加算や除算などの多くの基本演算は、ビット単位の演算子のみを使用して C でも実装できることを知っています。等号 (>=) を使用して同じことを行うにはどうすればよいですか?
if (x >= 0) {
...
}
私が思いつくことができる最も簡単な解決策:
#include <limits.h>
if ((x & INT_MAX) == x) // if (x >= 0)
...
気に入らない場合は==
、XOR を使用して等しいテストを行います。
#include <limits.h>
if ((x & INT_MAX) ^ x) // if (x < 0)
...
else // else x >= 0
...
欲しいだけならif (x >= 0)
これで十分
if (~x & INT_MIN)
一般的に2つの数字の間で「以上」を意味する場合、それははるかに大きな違いです
使用できるのがビット演算子だけで、比較演算子も無効になっている場合、それは不可能です(実際には、ほとんど何も不可能です)。暗黙の比較は常に存在します。たとえば、生成されたアセンブリコードif(x some bitwise stuff)
と同等のものとして実際に解釈される操作もあります。if(x some bitwise stuff) != 0)