Я видел некоторый код вида:Почему 0xff равной отрицательный 0 в C++
Object *area = new Object[n];
memset(area, 0xff, sizeof(Object) * count);
Так что это заполняет все поля в массиве объектов с битом 1. Тогда позже Есть несколько мест проверки, если поле объекта еще не заполнена, проверяя на ~ 0 (отрицательный ноль):
const unsigned int NULL_INDEX = ~0;
...
if(object.field == NULL_INDEX) {...}
поле на этом классе Object является тип без знака внутр. Я смущен, что почему 0xff можно оценить равным ~ 0, на unsigned int? Я видел еще один post, говорящий о 0xff равен -1 на системе дополнений 2, и нашел еще один post, который, я думаю, означает, что, если программа C++ интерпретирует 0xff как -1 или ~ 0, зависит от системы?
Что такое переносимый способ на C++ для проверки целого числа при заполнении 0xff? Должно ли это быть проверено на неподписанном int или подписанном int? Я так растерялся ...
'~ 0' не является отрицательным 0. –
~ инвертировать каждый бит. – Phil1970
Нет отрицательных 0 для целых чисел в большинстве распространенных представлений (дополнение 2). – Phil1970