将-1转换为uint32的目的?

时间:2012-01-29 11:15:23

标签: c# c++ casting

对于有经验的C ++开发人员来说,这可能是一个非常愚蠢的问题,但将-1转换为uint32的目的是什么?我正在将一个程序从C ++翻译成C#,在很多场合我看到这样的东西:

static const uint32 AllTypes = static_cast<uint32>(-1);

这到底是做什么的?如何在C#中完成同样的工作?

3 个答案:

答案 0 :(得分:4)

在使用二进制补码的系统上,将-1转换为无符号表示无符号数可以表示的最高值。

在C#中,您可以使用unchecked((UInt32)-1)或更好:UInt32.MaxValue。这是明确定义的行为,适用于所有CPU架构。

根据the thread rve linked,将-1转换为无符号结果会在C ++中的所有体系结构中设置所有位。

答案 1 :(得分:2)

  

如何在C#

中完成同样的工作
uint AllTypes = uint.MaxValue;

答案 2 :(得分:1)

我猜它曾用于将所有位都设置为1.当我们使用标记数据时很有用。可能是它给出了一些基本类型,而“复杂”类型(例如数组)就是自己的类型。