我在我的C#应用程序中试图打包整数,但移位运算符行为奇怪的方法。
下面的代码中的注释显示了执行该行后调试器看到的代码内容。以下代码中按位运算符的奇怪行为的原因是什么?
long code = 0; //0x0000000000000000
code += (0x1111 << 32); //0x0000000000001111
code += (0x2222 << 16); //0x0000000022221111
code += (0x3333); //0x0000000022224444
拍摄第一线,我希望包含在括号将首先执行的代码,这将导致在0x1111被左移32位左,但它不是,但对下一行的移位发生,并在正确的位置(即0x2222必须在添加之前移位,否则结果将为0x33330000)。
我对运营商错过了什么解释?
变量'code'是一个很长的值,你为什么假设0x1111是一个很长的值? – 2012-03-27 12:50:31
'0x1111' *被左移了32位。恰好如此,这相当于左移了0. – harold 2012-03-27 15:32:03