对于有经验的C++开发人员来说,这可能是一个非常愚蠢的问题,但将-1赋值给uint32的目的是什么?我从C++转换程序,以C#,有许多场合,当我看到这样的事情:铸造目的-1到uint32?
static const uint32 AllTypes = static_cast<uint32>(-1);
这究竟怎么办?如何在C#中完成同样的工作?
对于有经验的C++开发人员来说,这可能是一个非常愚蠢的问题,但将-1赋值给uint32的目的是什么?我从C++转换程序,以C#,有许多场合,当我看到这样的事情:铸造目的-1到uint32?
static const uint32 AllTypes = static_cast<uint32>(-1);
这究竟怎么办?如何在C#中完成同样的工作?
在使用二进制补码的系统上,将-1
转换为无符号可以给出无符号数可以表示的最高值。
在C#中,您可以使用unchecked((UInt32)-1)
或更高版本:UInt32.MaxValue
。这是明确定义的行为,适用于所有CPU架构。
根据the thread rve linked,将-1
转换为在C++中所有体系结构中设置的所有位的无符号结果。
它将所有位设置为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
啊,谢谢你的快速回复。这完全回答了我的问题。 – SvalinnAsgard 2012-01-29 11:30:30
我想它已经被用来把所有的位都设为1.当我们使用标记的数据时很有用。可能每种基本类型都有一定的规格,而'复杂'类型(例如数组)则有自己的特性。
怎么能同在C#
uint AllTypes = uint.MaxValue;
我马格努斯同意来完成,使'static_cast'与'dynamic_cast'一个单独的问题。 – CodesInChaos 2012-01-29 11:20:53
这两个问题都是重复的: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
您可能会发现'std :: numeric_limits :: max()'更自我记录。 –
justin
2012-01-29 11:32:37