gpt4 book ai didi

c# - 错误的位移结果

转载 作者:行者123 更新时间:2023-11-30 19:05:00 25 4
gpt4 key购买 nike

我是第一次使用 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;

假设 t_size = 0x2000385E 和 p_size = 20。temp = 0x20000000 符合预期。

现在如果 t_size = 0x40001014 和 p_size = 40,temp = 0x40001000 而不是 0x40000000。我使用按位计算器“手动”计算,它与预期结果 0x40000000 相匹配。

这对我来说可能是一个愚蠢的疏忽,但我不明白什么会导致 p_size = 40 的奇怪结果......欢迎任何建议!

最佳答案

将 32 位整数移动 40 位实际上没有意义,因为您会将整数移动比它包含的更多的位。

leftright轮类运算符(operator)记录他们在这种情况下所做的事情:

If the first operand is an int or uint (32-bit quantity), the shift count is given by the low-order five bits of the second operand (second operand & 0x1f).

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

如果你需要移动 40 位,但是你的值变成了 long

关于c# - 错误的位移结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33223105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com