Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#位偏移:这种行为是规范中的错误还是偶然?_C#_Bit Shift - Fatal编程技术网

C#位偏移:这种行为是规范中的错误还是偶然?

C#位偏移:这种行为是规范中的错误还是偶然?,c#,bit-shift,C#,Bit Shift,我当时正在使用位移位运算符(参见我的问题),一位SO用户指出了我计算移位操作数时的一个错误——我计算的是[1,32]的范围,而不是[0,31]的整数范围(SO社区万岁!) 在修复问题时,我惊讶地发现以下行为: -1 << 32 == -1 -1我认为规范的相关部分如下: 对于预定义运算符,要移位的位数计算如下: 当x的类型为int或uint时,移位计数由 低阶五位计数。换句话说,计算移位计数 来自计数&0x1F 当x的类型为long或ulong时,移位计数由 低阶六位计数。换句话

我当时正在使用位移位运算符(参见我的问题),一位SO用户指出了我计算移位操作数时的一个错误——我计算的是[1,32]的范围,而不是[0,31]的整数范围(SO社区万岁!)

在修复问题时,我惊讶地发现以下行为:

-1 << 32 == -1

-1我认为规范的相关部分如下:

对于预定义运算符,要移位的位数计算如下:

  • 当x的类型为int或uint时,移位计数由 低阶五位计数。换句话说,计算移位计数 来自计数&0x1F

  • 当x的类型为long或ulong时,移位计数由 低阶六位计数。换句话说,计算移位计数 来自计数&0x3F

如果得到的移位计数为零,移位运算符只返回值 x。


32
0x20
。表达式
0x20&0x1F
的计算结果为
0
。因此,移位计数为零,不进行移位;表达式
-1ah,当然。我读了那本书,但我一定是昏了头。这很有道理。谢谢
-1 << 32 == 0