sbyte (C#-Referenz)sbyte (C# Reference)

sbyte kennzeichnet einen ganzzahligen Typ, der Werte anhand der Größe und des Bereichs speichert, die in der folgenden Tabelle gezeigt werden.sbyte denotes an integral type that stores values according to the size and range shown in the following table.

TypType BereichRange GrößeSize .NET Framework-Typ.NET Framework type
sbyte –128 bis 127-128 to 127 Ganze 8-Bit-Zahl mit VorzeichenSigned 8-bit integer System.SByte

LiteraleLiterals

Sie können eine sbyte-Variable deklarieren und initialisieren, indem Sie ihr ein Dezimalliteral, ein hexadezimales Literal oder (ab C# 7.0) ein binäres Literal zuweisen.You can declare and initialize an sbyte variable by assigning a decimal literal, a hexadecimal literal, or (starting with C# 7.0) a binary literal to it.

Im folgenden Beispiel werden Ganzzahlen wie -102, die als dezimale, hexadezimale und binäre Literale dargestellt werden, aus int in sbyte-Werte konvertiert.In the following example, integers equal to -102 that are represented as decimal, hexadecimal, and binary literals are converted from int to sbyte values.

sbyte sbyteValue1 = -102;
Console.WriteLine(sbyteValue1);

unchecked {
   sbyte sbyteValue2 = (sbyte)0x9A;
   Console.WriteLine(sbyteValue2);

   sbyte sbyteValue3 = (sbyte)0b1001_1010;
   Console.WriteLine(sbyteValue3);
}
// The example displays the following output:
//          -102
//          -102
//          -102

Hinweis

Verwenden Sie das Präfix 0x oder 0X zum Kennzeichnen eines hexadezimalen Literals und das Präfix 0b oder 0B zum Kennzeichnen eines binären Literals.You use the prefix 0x or 0X to denote a hexadecimal literal and the prefix 0b or 0B to denote a binary literal. Dezimale Literale haben kein Präfix.Decimal literals have no prefix.

Mit C# 7.0 wurde eine Reihe von Features zur Verbesserung der Lesbarkeit hinzugefügt.Starting with C# 7.0, a couple of features have been added to enhance readability.

  • C# 7.0 lässt die Verwendung des Unterstrichs (_) als Zifferntrennzeichen zu.C# 7.0 allows the usage of the underscore character, _, as a digit separator.
  • C# 7.2 lässt die Verwendung von _ als Zifferntrennzeichen nach dem Präfix für ein binäres oder hexadezimales Literal zu.C# 7.2 allows _ to be used as a digit separator for a binary or hexadecimal literal, after the prefix. Dezimalliterale dürfen keinen vorangestellten Unterstrich aufweisen.A decimal literal isn't permitted to have a leading underscore.

Im Folgenden werden einige Beispiele veranschaulicht.Some examples are shown below.

unchecked {
   sbyte sbyteValue4 = (sbyte)0b1001_1010;
   Console.WriteLine(sbyteValue4);

   sbyte sbyteValue5 = (sbyte)0b_1001_1010;       // C# 7.2 onwards
   Console.WriteLine(sbyteValue5);
}
// The example displays the following output:
//          -102
//          -102

Wenn Sich das Ganzzahlliteral außerhalb des Bereichs von sbyte befindet – sprich, wenn es kleiner als SByte.MinValue oder größer als SByte.MaxValue ist – tritt ein Kompilierfehler auf.If the integer literal is outside the range of sbyte (that is, if it is less than SByte.MinValue or greater than SByte.MaxValue, a compilation error occurs. Wenn ein Ganzzahlliteral kein Suffix besitzt, ist sein Typ der erste dieser Typen, in dem sein Wert dargestellt werden kann: int, uint, long, ulong.When an integer literal has no suffix, its type is the first of these types in which its value can be represented: int, uint, long, ulong. Dies bedeutet, dass in diesem Beispiel die numerischen Literale 0x9A und 0b10011010 als 32-Bit Ganzzahlen mit Vorzeichen mit einem Wert von 156 interpretiert werden, was SByte.MaxValue übersteigt.This means that, in this example, the numeric literals 0x9A and 0b10011010 are interpreted as 32-bit signed integers with a value of 156, which exceeds SByte.MaxValue. Aus diesem Grund wird der Umwandlungsoperator benötigt, und die Zuordnung muss in einem unchecked Kontext erfolgen.Because of this, the casting operator is needed, and the assignment must occur in an unchecked context.

Überladungsauflösung des CompilerCompiler overload resolution

Beim Aufrufen überladener Methoden muss eine Typumwandlung durchgeführt werden.A cast must be used when calling overloaded methods. Betrachten Sie z.B. die folgenden überladenen Methoden, die die Parameter sbyte und int verwenden:Consider, for example, the following overloaded methods that use sbyte and int parameters:

public static void SampleMethod(int i) {}  
public static void SampleMethod(sbyte b) {}  

Die Verwendung der sbyte-Umwandlung gewährleistet, dass der richtige Typ aufgerufen wird, wie z.B.:Using the sbyte cast guarantees that the correct type is called, for example:

// Calling the method with the int parameter:  
SampleMethod(5);  
// Calling the method with the sbyte parameter:  
SampleMethod((sbyte)5);  

KonvertierungenConversions

Es gibt eine vordefinierte implizite Konvertierung von sbyte in short, int, long, float, double oder decimal.There is a predefined implicit conversion from sbyte to short, int, long, float, double, or decimal.

Sie können numerische nonliteral-Typen einer größeren Speichergröße nicht implizit zu sbyte konvertieren (siehe Tabelle ganzzahliger Typen für die Speichergrößen ganzzahliger Typen).You cannot implicitly convert nonliteral numeric types of larger storage size to sbyte (see Integral Types Table for the storage sizes of integral types). Betrachten Sie z.B. die folgenden beiden sbyte-Variablen x und y:Consider, for example, the following two sbyte variables x and y:

sbyte x = 10, y = 20;  

Die folgende Zuweisungsanweisung erzeugt einen Kompilierungsfehler, da der arithmetische Ausdruck auf der rechten Seite des Zuweisungsoperators standardmäßig int ergibt.The following assignment statement will produce a compilation error, because the arithmetic expression on the right side of the assignment operator evaluates to int by default.

sbyte z = x + y;   // Error: conversion from int to sbyte  

Wandeln Sie den Ausdruck wie im folgenden Beispiel um, um das Problem zu beheben:To fix this problem, cast the expression as in the following example:

sbyte z = (sbyte)(x + y);   // OK: explicit conversion  

Es ist jedoch möglich, die folgenden Anweisungen zu verwenden, bei denen die Zielvariable über dieselbe oder eine größere Speichergröße verfügt:It is possible though to use the following statements, where the destination variable has the same storage size or a larger storage size:

sbyte x = 10, y = 20;  
int m = x + y;  
long n = x + y;  

Beachten Sie auch, dass es keine implizite Konvertierung von Gleitkomma-Datentypen zu sbyte gibt.Notice also that there is no implicit conversion from floating-point types to sbyte. Die folgende Anweisung erzeugt z.B. einen Compilerfehler, außer es wird eine explizite Umwandlung verwendet:For example, the following statement generates a compiler error unless an explicit cast is used:

sbyte x = 3.0;         // Error: no implicit conversion from double  
sbyte y = (sbyte)3.0;  // OK: explicit conversion  

Informationen zu arithmetischen Ausdrücken mit ganzzahligen und Gleitkommatypen finden Sie unter float und double.For information about arithmetic expressions with mixed floating-point types and integral types, see float and double.

Weitere Informationen zu impliziten numerischen Konvertierungsregeln finden Sie in der Tabelle für implizite numerische Konvertierungen.For more information about implicit numeric conversion rules, see the Implicit Numeric Conversions Table.

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

SByte
C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
Tabelle ganzzahliger TypenIntegral Types Table
Tabelle integrierter TypenBuilt-In Types Table
Tabelle für implizite numerische KonvertierungenImplicit Numeric Conversions Table
Tabelle für explizite numerische KonvertierungenExplicit Numeric Conversions Table