in C++, ich den folgenden Code haben:Warum erzeugt das Maskieren einer negativen Zahl eine positive Zahl?
int x = -3;
x &= 0xffff;
cout << x;
Dies erzeugt
65533
Aber wenn ich die negative entfernen, so habe ich dies:
int x = 3;
x &= 0xffff;
cout << x;
ich einfach 3
als Ergebnis
Warum das erste Ergebnis nicht eine negative Zahl erzeugen? Ich würde erwarten, dass -3 Zeichen auf 16 Bits erweitert werden würde, was immer noch eine zweifache negative Komplementärzahl ergeben sollte, wenn man bedenkt, dass all diese erweiterten Bits 1 wären. Folglich wäre das höchstwertige Bit auch 1.
könnten Sie erklären, warum 0xFFFD nicht mehr in Zweierkomplementform ist? – Dillydill123
@ Dillydill123, weil die oberen 2 Bytes von 0xffff 0 sind. Versuchen Sie, eine 32-Bit-Maske (d. H. 0xffffffff) zu verwenden, und es sollte das Vorzeichen beibehalten. – sashang
Macht Sinn! danke – Dillydill123