C# 错误的位移位结果

C# 错误的位移位结果,c#,bit-shift,C#,Bit Shift,我第一次使用bitshift,遇到了意想不到的结果 我宣布的班次金额如下: byte p_size = 0; if (ver == 0x12 || ver == 0x13) p_size = 20; else p_size = 40; 要移位的值声明为 int t_size = rinput.ReadInt32(); 最后是我用来转换的代码: int temp = t_size >> p_size << p_size; int temp=t_size

我第一次使用bitshift,遇到了意想不到的结果

我宣布的班次金额如下:

byte p_size = 0;
if (ver == 0x12 || ver == 0x13)
    p_size = 20;
else
    p_size = 40;
要移位的值声明为

int t_size = rinput.ReadInt32();
最后是我用来转换的代码:

int temp = t_size >> p_size << p_size;

int temp=t_size>>p_size将32个整数移位40位实际上没有意义,因为您将整数移位的位数超过其包含的位数

在这种情况下,操作员和轮班操作员都会记录他们的操作:

如果第一个操作数是int或uint(32位数量),则移位 计数由第二个操作数的低位5位给出 (第二个操作数&0x1f)

因此,当
p_size
为40时,移位将移位
40&0x1f=8位。


如果需要移位40位,但将值转换为
long

则当前行为应为40&0x1f为8,如中所述

如果第一个操作数是int或uint(32位数量),则移位计数由第二个操作数(第二个操作数&0x1f)的低位五位给出

你可能在寻找一些掩蔽而不是转移——也许吧

  t_size & 0xFF000000
将32位向左移动40个位置,您期望得到什么?