в C++, у меня есть следующий код:Почему маскирование отрицательного числа приводит к положительному числу?
int x = -3;
x &= 0xffff;
cout << x;
Это производит
65533
Но если убрать негатив, так что у меня есть это:
int x = 3;
x &= 0xffff;
cout << x;
Я просто получить 3
в результате
Почему первый результат не произвести отрицательное число? Я ожидал бы, что -3 будет знаком, расширенным до 16 бит, который все равно должен дать отрицательное число с добавочным номером, учитывая, что все эти расширенные биты будут равны 1. Следовательно, самым значительным битом будет 1.
Не могли бы вы объяснить, почему 0xFFFD больше не находится в форме дополнений? – Dillydill123
@ Dillydill123, потому что верхние 2 байта 0xffff равны 0. Попробуйте использовать 32-битную маску (т. Е. 0xffffffff), и она должна сохранить знак. – sashang
Имеет смысл! спасибо – Dillydill123