Wie kann ich konvertieren einer Ganzzahl in einen unsigned integer?
Dem Stück code wie:-
int x = -24;
uint y = (uint) x;
Console.WriteLine("*****" + y + "********");
//o/p is *****4294967272********
Warum diese Art von Verhalten in C#, Detaillierte Ausarbeitung wäre hilfreich. Danke alle.
- Warum Fragen Sie so konvertieren Sie ein
int
zu einemuint
wenn Sie bereits den code, der das macht? Was Fragen Sie? - Sie haben versucht mit Konvertieren.ToUInt32() eingebaute Funktion?
- XY-problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Negativen zahlen (wie
-24
) vertreten sind als binäre Ergänzung, sieheen.wikipedia.org/wiki/Two's_complement
details. In Ihrem Fall
Beim casting
int
zuuint
vorsichtig sein, da-24
ist überuint
Bereich (die[0..uint.MaxValue]
) können SieOverflowException
geworfen. Ein safier Umsetzung istunchecked
Schlüsselwort.unchecked
. Eigentlich casting von int nach uint nie OverflowException...int x = -24; uint y = checked((uint) x);
und sehen dieOverflowException
. Seine-24
jenseitsuint.MinValue
(das ist0
)checked
oderunchecked
dann das Verhalten mehrdeutig ist (auf der Basis der compiler-Einstellung), aber seit der OP will den cast um erfolgreich zu sein, dannunchecked
sollte verwendet werden?OverflowException
auf die cast Umgekehrt, d.h.uint -> int
, versuchen Sie dies:uint y = 3000000000u; int x = checked((int) y);
seit 3 Milliarden ist innerhalbuint
Bereich aber ausint
ein.int
Daten geben, da wird es erfordern, nicht zu verwenden, die wichtigsten bit-fahne und ich dachte, dass die zahlen zwischen 0 und -(2^31) sind ok, zu konvertieren, bidirektional, da es nicht "Kompromiss", dass Zeichen-flag. Ich weiß nicht, ob es Sinn macht, aber ich war falsch 🙂Gibt es nur wenige Möglichkeiten, um zu konvertieren
int
zuuint
Technik #1
Technik #2
Technik #3
Technik #4
Few
Five
problem, Danke 😉Versuchen Sie den code unten