gpt4 book ai didi

C# 向左旋转位溢出问题

转载 作者:太空狗 更新时间:2023-10-29 21:04:47 26 4
gpt4 key购买 nike

几天来我一直在努力让它工作,我已经阅读了一千份指南和人们的问题,但我仍然找不到正确的方法。

我想做的是将位向左旋转,这是一个例子。

原始数 = 10000001 = 129
我需要的 = 00000011 = 3

我必须将位向左旋转一定次数(这取决于用户输入的内容),这是我所做的:

byte b = (byte)129;
byte result = (byte)((byte)b << 1);
Console.WriteLine(result);

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);

问题在于,当我尝试对该数字使用 (<<) 运算符时,它会导致错误 (OverflowException)(请注意,如果我输入一个第一位为 0 的数字;示例:3 = 00000011 ; 它按预期工作,结果返回 6。

问题是,如果第一位是 1,就会出现 (OverflowException) 错误。我知道这不是旋转,它只是一个移位,第一位消失,在字节的末尾弹出一个 0,然后我可以用 OR 000000001 操作来改变它,使它成为 1(如果第一个位是 1,如果是 0,我就把它留在那里)。

最佳答案

很明显,您会收到溢出异常,因为您是在已检查的上下文中操作。

您可以通过将代码放在未经检查的上下文中来解决这个问题 - 或者只是确保您不对可能超过 255 的值执行转换回 byte。对于示例:

int shifted = b << rotateLeftBits;
int highBits = shifted & 0xff;
int lowBits = shifted >> 8; // Previously high bits, rotated
byte result = (byte) (highBits | lowBits);

这适用于最大 8 的旋转尺寸。对于更大的尺寸,只需使用 rotateLeftBits % 8(如果您有时想向右旋转,则归一化为非负数)。

关于C# 向左旋转位溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296021/

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