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

时间:2008-11-26 07:40:01

标签: c# types hex

这是follow up question。因此,Java商店在two's-complements中的整数,您可以执行以下操作:

int ALPHA_MASK = 0xff000000;

在C#中,这需要使用无符号整数uint,因为它将其解释为4278190080而不是-16777216

我的问题是,如何在c#中以十六进制表示法声明负值,以及内部表示的整数究竟是如何?这里与Java有什么不同?

3 个答案:

答案 0 :(得分:24)

C#(而不是.NET)也使用了二进制补码,但它支持有符号和无符号类型(Java没有)。位掩码更自然地是无符号的东西 - 为什么一位不同于所有其他位?

在这种特定情况下,使用未经检查的演员表是安全的:

int ALPHA_MASK = unchecked((int)0xFF000000);

要“直接”将此数字表示为有符号值,请编写

int ALPHA_MASK = -0x1000000; // == -16777216

十六进制不是(或不应该)与十进制有任何不同:要表示负数,您需要写一个负号,然后是表示绝对值的数字。

答案 1 :(得分:7)

好吧,你可以使用未经检查的块和强制转换:

unchecked
{
    int ALPHA_MASK = (int)0xff000000;
}

int ALPHA_MASK = unchecked((int)0xff000000);

不是很方便,但是......或许只是使用一个字面整数?

答案 2 :(得分:0)

只是为了增加对伤害的侮辱,这也会起作用:

-0x7F000000