C#将位旋转到左溢出问题

前端之家收集整理的这篇文章主要介绍了C#将位旋转到左溢出问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直试图让这个工作好几天,我已经阅读了一千个指南和人们的问题,但是,我仍然无法找到一种正确的方法.

我想要做的是将位旋转到左侧,这是一个例子.

原始号码= 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,它会给我(OverflorException)错误.我知道这不是旋转,它只是一个移位,第一位消失,在字节结束时弹出一个0,然后我可以用OR 000000001操作改变它使它成为1(如果第一位是一个1,如果它是0我只是留在那里). 有任何想法吗?提前致谢!

解决方法

你得到一个溢出异常,因为你在一个检查的上下文中运行,显然.

您可以通过将代码放在未经检查的上下文中来解决这个问题 – 或者只是确保您不会对可以超过255的值执行强制转换为字节.例如:

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

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

原文链接:https://www.f2er.com/csharp/97353.html

猜你在找的C#相关文章