2010-01-22 4 views
18

Gibt es eine Möglichkeit, einen int auf einen negativen Wert mit einem Hexadezimal-Literal in C# zu setzen? Ich überprüfte die Spezifikation auf Integer literals, aber es erwähnte nichts.Setzen negativer Werte mit hexadezimalen Literalen in C#

Zum Beispiel:

int a = -1;   // Allowed 
int b = 0xFFFFFFFF; // Not allowed? 

Hexadezimal-Schreibweise ist klarer für meine Anwendung, und ich würde es vorziehen, nicht uint s zu verwenden, weil ich einige zusätzliche Casting müssten tun.

+2

werfen Sie einen Blick hier: http://stackoverflow.com/questions/319993/c-hexadecimal-notation-and-signed-integers –

Antwort

22

das ungebremste Schlüsselwort verwenden.

unchecked 
{ 
    int b = (int)0xFFFFFFFF;  
} 

oder noch kürzer

int b = unchecked((int)0xFFFFFFFF); 
1

Ich glaube, Sie -0x1 mit C#

+1

Ja, das ist eine gültige Syntax, aber mit der Negation zu tun in meinem Kopf, um herauszufinden, was der wahre Wert ist, ist ein bisschen langweilig. –

0

Sie können die "Convert" Klasse verwenden können:

string hex = "FF7F"; 
int myInt = Convert.ToInt32(hex, 16); 
1

Sie haben es zu werfen und es in einem ungeprüften Kontext zu setzen.

unchecked { 
    int i = (int)0xFFFFFFFF; 
} 
1

Dies wird die Arbeit ohne ungeprüfte Operationen oder Gießen getan.

int i = 0xFF << 24 | 0xFF << 16 | 0xFF << 8 | 0xFF;