这是一个 follow up question .因此,Java 将整数存储在 two's-complements 中您可以执行以下操作:
int ALPHA_MASK = 0xff000000;
在 C# 中,这需要使用无符号整数 uint
,因为它将其解释为 4278190080
而不是 -16777216
。
我的问题是,如何在 C# 中以十六进制表示法声明负值,整数在内部是如何表示的?这里与 Java 有什么区别?
最佳答案
C#(更确切地说,.NET)也使用二进制补码,但它同时支持有符号和无符号类型(Java 不支持)。位掩码更自然地是无符号的东西 - 为什么一个位应该与所有其他位不同?
在这种特定情况下,使用未经检查的转换是安全的:
int ALPHA_MASK = unchecked((int)0xFF000000);
要“直接”将此数字表示为带符号的值,您可以编写
int ALPHA_MASK = -0x1000000; // == -16777216
十六进制与十进制没有(或不应)有任何不同:要表示负数,您需要写一个负号,然后是表示绝对值的数字。
关于c# - 十六进制表示法和有符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319993/