2012-01-29 113 views
3

对于有经验的C++开发人员来说,这可能是一个非常愚蠢的问题,但将-1赋值给uint32的目的是什么?我从C++转换程序,以C#,有许多场合,当我看到这样的事情:铸造目的-1到uint32?

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

这究竟怎么办?如何在C#中完成同样的工作?

+0

我马格努斯同意来完成,使'static_cast'与'dynamic_cast'一个单独的问题。 – CodesInChaos 2012-01-29 11:20:53

+1

这两个问题都是重复的:http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast和http://stackoverflow.com/questions/809227/is-it-安全使用-1将所有位设置为true – rve 2012-01-29 11:25:45

+0

您可能会发现'std :: numeric_limits :: max()'更自我记录。 – justin 2012-01-29 11:32:37

回答

4

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

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

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

+1

它将所有位设置为1(=最高编号),它适用于所有机器,不仅是2s补码。查看http://stackoverflow.com/questions/809227/is-it-safe-to-use-1-to-set-all-bits-to-true – rve 2012-01-29 11:22:44

+0

啊,谢谢你的快速回复。这完全回答了我的问题。 – SvalinnAsgard 2012-01-29 11:30:30

1

我想它已经被用来把所有的位都设为1.当我们使用标记的数据时很有用。可能每种基本类型都有一定的规格,而'复杂'类型(例如数组)则有自己的特性。

2

怎么能同在C#

uint AllTypes = uint.MaxValue;