C#中的hex表示法和有符号整数
这是一个后续问题 。 所以,Java商店的整数是两个补码 ,你可以做到以下几点:
int ALPHA_MASK = 0xff000000;
在C#中,这需要使用无符号整数uint
,因为它将其解释为4278190080
而不是-16777216
。
我的问题是,如何在c#中以hex表示法声明负值,以及内部表示的整数究竟是如何? 这里与Java有什么不同?
C#(而不是.NET)也使用了两者的补码,但它支持有符号和无符号类型(Java没有)。 位掩码更自然地是无符号的东西 – 为什么一位不同于所有其他位?
在这种特定情况下,使用未经检查的强制转换是安全的:
int ALPHA_MASK = unchecked((int)0xFF000000);
要“直接”将此数字表示为有符号值,请编写
int ALPHA_MASK = -0x1000000; // == -16777216
hex不是(或不应该)与十进制有任何不同:要表示负数,您需要写一个负号,然后是表示绝对值的数字。
好吧,你可以使用一个未经检查的块和一个强制转换:
unchecked { int ALPHA_MASK = (int)0xff000000; }
要么
int ALPHA_MASK = unchecked((int)0xff000000);
虽然不是很方便,但也许只是使用一个字面整数?
只是为了增加对伤害的侮辱,这也会起作用:
-0x7F000000