C# 错误的位移位结果
我第一次使用bitshift,遇到了意想不到的结果 我宣布的班次金额如下: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
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个位置,您期望得到什么?