在 C# 中使用十六进制文字将整数设置为负值

Posted

技术标签:

【中文标题】在 C# 中使用十六进制文字将整数设置为负值【英文标题】:Setting ints to negative values using hexadecimal literals in C# 【发布时间】:2011-01-08 09:30:19 【问题描述】:

有没有办法在 C# 中使用十六进制文字将 int 设置为负值?我检查了Integer literals 上的规范,但没有提及任何内容。

例如:

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

十六进制表示法对我的应用程序来说更清晰,我不想使用uints,因为我需要做一些额外的转换。

【问题讨论】:

看这里:***.com/questions/319993/… Hexadecimal notation and signed integers in C#的可能重复 【参考方案1】:

使用未选中的关键字。

unchecked

   int b = (int)0xFFFFFFFF;    

甚至更短

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

【讨论】:

【参考方案2】:

我认为你可以在 c# 中使用-0x1

【讨论】:

是的,这是有效的语法,但必须在脑海中进行否定以找出真正的值是什么有点乏味。【参考方案3】:

您必须将其强制转换并将其置于未经检查的上下文中。

unchecked 
    int i = (int)0xFFFFFFFF;

【讨论】:

【参考方案4】:

这将在没有未经检查的操作或强制转换的情况下完成工作。

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

【讨论】:

【参考方案5】:

您可以使用“转换”类:

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

【讨论】:

以上是关于在 C# 中使用十六进制文字将整数设置为负值的主要内容,如果未能解决你的问题,请参考以下文章

十六进制表示法和有符号整数

在 Kotlin 中编写一个等于 Int.MIN_VALUE 的十六进制整数文字

如何将 gi-normous 整数(字符串格式)转换为十六进制格式? (C#)

C#中的十六进制操作[重复]

如何检测 C# 中的负十六进制值?

将包含以“0x”开头的十六进制值的字符串转换为整数或长整数