我第一次使用bitshift,我遇到了意想不到的结果.
我正在宣布转移金额如下:
byte p_size = 0;
if (ver == 0x12 || ver == 0x13)
p_size = 20;
else
p_size = 40;
Run Code Online (Sandbox Code Playgroud)
要移位的值声明为
int t_size = rinput.ReadInt32();
Run Code Online (Sandbox Code Playgroud)
最后我用来转移的代码:
int temp = t_size >> p_size << p_size;
Run Code Online (Sandbox Code Playgroud)
假设t_size = 0x2000385E和p_size = 20. temp = 0x20000000.
现在,如果t_size = 0x40001014和p_size = 40,则temp = 0x40001000而不是0x40000000.我使用按位计算器"手动"计算它,它匹配0x40000000的预期结果.
这可能是对我的愚蠢疏忽,但我不明白什么会导致p_size = 40的奇怪结果...任何建议表示赞赏!
如操作符>>中所述,当前行为为40&0x1f为8
如果第一个操作数是int或uint(32位数量),则移位计数由第二个操作数的低位5位(第二个操作数和0x1f)给出.
你可能正在寻找一些掩盖而不是转变 - 也许
t_size & 0xFF000000
Run Code Online (Sandbox Code Playgroud)