俗话说小鬼难缠啊!简单的C# 移位的问题
uint x = 0xffffffff >> 31; //头一次右移了31位,结果是1; 这个在我预料中
x = x >> 1; //再右一次,结果是0;这个也在预数;
//但下面这个结果就泥玛大大出乎我的意料。右移了32位结果还是0xffff,ffff
//我本来想他的结果也应该是0啊。每右移1次,剔除一个1,右移32位。
//32个1全部剔除,那不应该是0吗???
//应该和让面的 x的结果是一样啊 可是y=0xffff,ffff
请问这是怎么回事???
uint y = 0xffffffff >> 32;
------解决方案--------------------本帖最后由 caozhy 于 2013-10-27 00:26:26 编辑
MSDN上说了:
If the first operand is an int or uint (32-bit quantity), the shift count is given by the
low-order five bits of the second operand. That is, the actual shift count is 0 to 31 bits.
也就是只取最低5位。
32 是二进制 100000,所以 n >> 32 相当于 n >> 0。
------解决方案--------------------惭愧,应用型程序写多了。楼主的代码居然看不大懂了。
连个位数枚举都用int类型的菜鸟撸过,
------解决方案--------------------http://msdn.microsoft.com/zh-cn/library/xt18et0d(v=vs.90).aspx
第二个操作数的低5位,不过是0~31