C # hat verschiedene Werttypen, und jeder erfüllt seinen eigenen Zweck. Int32 reicht von - (0x7FFFFFFF + 1) bis 0x7FFFFFFF, und von jedem Rechner, auf dem ich es jemals ausgeführt habe, scheint mir unchecked ((int) 0xFFFFFFFF) immer den resultierenden Wert -1 zu haben. Ist das immer so? Stellt .NET außerdem immer -1 als 0xFFFFFFFF im Speicher eines Systems dar? Ist das führende Bit immer das Vorzeichenbit? Verwendet es immer die Zweierkomplement-Binärdarstellung für ganze Zahlen?
Die Dokumentation für System.Int32 explizit gibt an, dass es in zwei Komplementform gespeichert ist. Es ist ganz unten:
Neben der Arbeit mit einzelnen ganzen Zahlen als Dezimalwerte, Sie Möglicherweise möchten Sie bitweise Operationen mit ganzzahligen Werten ausführen oder arbeiten mit den binären oder hexadezimalen Darstellungen von ganzzahligen Werten. Int32-Werte werden in 31 Bits mit dem zweiunddreißigsten Bit dargestellt verwendet als ein Vorzeichenbit. Positive Werte werden durch Verwendung dargestellt Zeichen-und-Betrags-Darstellung. Negative Werte sind in zwei Komplement-Darstellung. Dies ist wichtig zu beachten, wenn Sie Führen Sie bitweise Operationen an Int32-Werten oder bei der Arbeit mit einzelne Bits. Um einen numerischen, Booleschen oder Vergleich durchzuführen Operation für beliebige zwei nicht-dezimal Werte, beide Werte müssen das gleiche verwenden Darstellung.
So scheint es, dass die Antwort auf alle Ihre Fragen ja ist.
Auch der Bereich für ein Int32 ist von - (0x80000000) bis 0x7FFFFFFFF.
C # - wie auch fast jeder andere Computer auf dem Planeten - repräsentiert ganze Zahlen in Zweierkomplement-Notation. Ich glaube, dass irgendwann CPUs entwickelt wurden, die andere Repräsentationen verwendeten, aber heutzutage kann man ziemlich zuverlässig davon abhängen, dass ganze Zahlen in Zweierkomplement-Notation dargestellt werden.
Wir zählen die Bits von rechts nach links, mit dem Bit ganz rechts, wobei Bit 0 das niedrigstwertige Bit und das Bit ganz links das signifikanteste Bit ist.
Das höchstwertige Bit (ganz links) ist das Vorzeichen: 0 ist positiv; 1 ist negativ.
Die restlichen Bits tragen den Wert. Das heißt, die gültige Domäne einer ganzen Zahl von N Bits der Größe ist - (2
Eine Zahl in Zweier-Komplement zu setzen ist einfach:
Also wird der Wert +1 als 0x0001 dargestellt, während -1 als
dargestellt wirdOder 0xFFFF
Der Grund für die Zweierkomplement-Notation ist, dass es das CPU-Design einfacher macht: Da die Subtraktion die Addition des Negativs ist (zB 3-2 ist gleich 3 + -2), müssen sie keine Subtraktionsschaltungen entwerfen:
1-1 ist das gleiche wie 1 + -1 und ergibt null.
oder in hex,
%Vor%Bei den meisten CPUs setzt der Übertrag in oder aus dem höherwertigen Bit das Fixpunkt-Überlaufflag.
Tags und Links .net c# integer value-type