Der Bereich des langen Datentyps ist -9223372036854775808
bis 9223372036854775807
, aber die folgende Anweisung generiert den Compilerfehler "BC30036: Overflow":
Warum ist das ein Fehler? Wie kann ich die Konstante -9223372036854775808
im Code angeben?
Der Compiler analysiert den Ausdruck -9223372036854775808L
als einen unären Minus-Operator, der auf das Dezimal-Ganzzahl-Literal 9223372036854775808L
angewendet wird. Gemäß der VB.NET-Spezifikation :
Ein dezimales Integer-Literal ist eine Folge von Dezimalziffern (0-9).
Und:
Wenn der Typ eines Integer-Literals nicht ausreicht, um das Integer-Literal aufzunehmen, tritt ein Fehler bei der Kompilierung auf.
9223372036854775808L
ist zu groß für ein Long
, Sie erhalten also einen Überlauffehler.
(Das Minuszeichen ist nicht Teil des Integer-Literals.)
Um -9223372036854775808
wörtlich anzugeben, verwenden Sie ein hexadezimales Literal:
Die VB.NET-Spezifikation spielt auch darauf an:
Dezimal-Literale stellen direkt den Dezimalwert des Integral-Literals dar, während Oktal- und Hexadezimal-Literale den Binärwert des Ganzzahl-Literals darstellen (daher ist & amp; H8000S -32768, kein Überlauffehler).
Aus Gründen der Übersichtlichkeit sollten Sie wahrscheinlich Long.MinValue
anstelle eines Literals verwenden:
Wie René Vogt schon sagte, wird die äquivalente Aussage in C # gut übersetzt:
%Vor%Das liegt daran, dass (im Gegensatz zu VB.NET) C # unterstützt dies als Sonderfall :
Wenn ein dezimal_integer_literal mit dem Wert 9223372036854775808 (2 ^ 63) und kein integer_type_suffix oder der integer_type_suffix
L
oderl
angezeigt wird als das Token, das unmittelbar auf ein unäres Minus-Operator-Token folgt, ist das Ergebnis eine Konstante vom Typlong
mit dem Wert -9223372036854775808 (-2 ^ 63). In allen anderen Situationen ist ein solches dezimal_integer_literal vom Typulong
.
Tags und Links .net vb.net long-integer