sbyte (C#-Referenz)

sbyte kennzeichnet einen ganzzahligen Typ, der Werte anhand der Größe und des Bereichs speichert, die in der folgenden Tabelle gezeigt werden.

Typ Bereich Größe .NET Framework-Typ
sbyte –128 bis 127 Ganze 8-Bit-Zahl mit Vorzeichen System.SByte

Literale

Sie können eine sbyte-Variable deklarieren und initialisieren, indem Sie ihr ein dezimales Literal, ein hexadezimales Literal oder (beginnend mit C# 7) ein binäres Literal zuweisen.

Im folgenden Beispiel werden Ganzzahlen wie -102, die als dezimale, hexadezimale und binäre Literale dargestellt werden, aus int in sbyte-Werte konvertiert.

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

unchecked {
   sbyte sbyteValue4 = (sbyte)0x9A;
   Console.WriteLine(sbyteValue4);
   
   sbyte sbyteValue5 = (sbyte)0b1001_1010;
   Console.WriteLine(sbyteValue5);
}
// 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. Dezimale Literale haben kein Präfix.

Ab C# 7 können Sie auch den Unterstrich, _, als Zifferntrennzeichen zum Verbessern der Lesbarkeit verwenden, wie im folgenden Beispiel veranschaulicht.

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

Wenn Sich das Ganzzahlliteral außerhalb des Bereichs von sbyte befindet – sprich, wenn es kleiner als System.SByte.MinValue oder größer als System.SByte.MaxValue ist – tritt ein Kompilierfehler auf. Wenn ein Ganzzahlliteral kein Suffix besitzt, ist sein Typ der erste dieser Typen, in dem sein Wert dargestellt werden kann: 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 System.SByte.MaxValue übersteigt. Aus diesem Grund wird der Umwandlungsoperator benötigt, und die Zuordnung muss in einem unchecked Kontext erfolgen.

Überladungsauflösung des Compiler

Beim Aufrufen überladener Methoden muss eine Typumwandlung durchgeführt werden. Betrachten Sie z.B. die folgenden überladenen Methoden, die die Parameter sbyte und int verwenden:

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.:

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

Konvertierungen

Es gibt eine vordefinierte implizite Konvertierung von sbyte in short, int, long, float, double oder 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). Betrachten Sie z.B. die folgenden beiden sbyte-Variablen x und 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.

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

Wandeln Sie den Ausdruck wie im folgenden Beispiel um, um das Problem zu beheben:

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:

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. Die folgende Anweisung erzeugt z.B. einen Compilerfehler, außer es wird eine explizite Umwandlung verwendet:

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.

Weitere Informationen zu impliziten numerischen Konvertierungsregeln finden Sie in der Tabelle für implizite numerische Konvertierungen.

C#-Programmiersprachenspezifikation

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

Siehe auch

SByte
C#-Referenz
C#-Programmierhandbuch
C#-Schlüsselwörter
Tabelle ganzzahliger Typen
Tabelle integrierter Typen
Tabelle für implizite numerische Konvertierungen
Tabelle für explizite numerische Konvertierungen