当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《十六进制表示法和有符号整数》经验,为你挑选了2个好方法。

这是一个后续问题.所以,Java商店的整数是两个补码,你可以做到以下几点:

int ALPHA_MASK = 0xff000000;

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

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



1> Martin v. Lö..:

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

在这种特定情况下,使用未经检查的强制转换是安全的:

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

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

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

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



2> Marc Gravell..:

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

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

要么

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

虽然不是非常方便......也许只是使用一个字面整数?

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有