1

加算や除算などの多くの基本演算は、ビット単位の演算子のみを使用して C でも実装できることを知っています。等号 (>=) を使用して同じことを行うにはどうすればよいですか?

if (x >= 0) {
    ...
}
4

3 に答える 3

1

私が思いつくことができる最も簡単な解決策:

#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
    ...
于 2012-11-15T12:35:06.147 に答える
0

欲しいだけならif (x >= 0)これで十分

if (~x & INT_MIN)

一般的に2つの数字の間で「以上」を意味する場合、それははるかに大きな違いです

于 2015-01-26T05:00:30.633 に答える
-1

使用できるのがビット演算子だけで、比較演算子も無効になっている場合、それは不可能です(実際には、ほとんど何も不可能です)。暗黙の比較は常に存在します。たとえば、生成されたアセンブリコードif(x some bitwise stuff)と同等のものとして実際に解釈される操作もあります。if(x some bitwise stuff) != 0)

于 2012-11-15T11:50:35.190 に答える