が、私はこのように見ていくつかのコードを見たん:その後、後でオブジェクトのフィールドかどうかをチェックする複数の場所がありますので、これはビット1とオブジェクト配列のすべてのフィールドを埋めはなぜC++で0負に等しい0xffの
Object *area = new Object[n];
memset(area, 0xff, sizeof(Object) * count);
〜0(負のゼロ)をチェックすることによってまだ満たされていません。
const unsigned int NULL_INDEX = ~0;
...
if(object.field == NULL_INDEX) {...}
このオブジェクトクラスのフィールドは符号なしint型です。私は、0xffがunsigned intの〜0と等しいと評価できるのは混乱していますか?私は別のpostが2の補数系で-1と等しい0xffを話すのを見て、別のpostを見つけました。これは、C++プログラムが0xffを-1または0に解釈するかどうかはシステムに依存するということですか?
0xffで埋め尽くされたときに整数をチェックする移植可能な方法は何ですか?これは、unsigned intまたはsigned intに対してチェックする必要がありますか?私はとても困惑している...
'〜0'は負ではありません。0 –
〜すべてのビットを反転します。 – Phil1970
最も一般的な表現(2の補数)の整数には負の0はありません。 – Phil1970