Ich versuche, eine große Int64 mit Nibble-Informationen in Bytes zu konstruieren.Warum diese bestimmte Operation in C# überläuft (cf. CS0220)?
Die folgenden Codezeilen wie erwartet:
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x1000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000));
Warum wird die folgende Zeile führen zu einem Compiler-Fehler CS0220 „Der Betrieb bei der Kompilierung überläuft im aufgegebenen Modus“ und die andere nicht?
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x10000000));
Das Ergebnis wäre:
FFFFFFFFD0000000
statt:
0000D0000000
das jemand erklären kann? Ich werde jetzt mit Shift-Operatoren konvertieren, aber immer noch neugierig, warum dieser Ansatz nicht funktioniert!
Update: Der Fehler tritt auch auf, wenn (Int64) (0x0d < < 28) verwendet wird.
Sie waren schneller! Beendete die gleiche Antwort, als die Antwort erschien. +1. Stimme voll und ganz zu Ihrer Antwort :) –
Heh. es passiert die ganze Zeit, auch für mich. :) Trotzdem danke. – Noldorin