加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:02:43 所属栏目:百科 来源:网络整理
导读:我一直试图让这个工作好几天,我已经阅读了一千个指南和人们的问题,但是,我仍然无法找到一种正确的方法. 我想要做的是将位旋转到左侧,这是一个例子. 原始号码= 10000001 = 129 我需要的是= 00000011 = 3 我必须将这些位旋转一定时间(这取决于用户输入的内容),
我一直试图让这个工作好几天,我已经阅读了一千个指南和人们的问题,但是,我仍然无法找到一种正确的方法.

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

原始号码= 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(如果您有时可能想要向右旋转,则标准化为非负数).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读