移位操作的值大于数据类型的大小

时间:2019-01-05 03:03:34

标签: c# roslyn bit-shift

我正在查看一些C#IL反汇编,并且我注意到C#编译器添加了login id操作,以确保移位操作的右侧始终小于以位为单位的字的大小。例如,

&

编译为

int word = 1 << x

int word = 1 << (x & 0x1F)

编译为

long word = 1L << x

我一直认为32位的移位运算大于31,而64位的移位运算大于63只会导致零,我的假设是否正确?当移位超过数据类型的大小时,会不会出现不确定的行为?如果没有,为什么C#编译器会这样做?

0 个答案:

没有答案