C# Rotate bits to left overflow issue

bit, c#

Solution

You're getting an overflow exception because you're operating in a checked context, apparently.

You can get around that by putting the code in an unchecked context - or just by making sure you don't perform the cast back to `byte` on a value that can be more than 255. For example:

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

This will work for rotate sizes of up to 8. For greater sizes, just use `rotateLeftBits % 8` (and normalize to a non-negative number if you might sometimes want to rotate right).

Problem

I've been trying to get this to work for several days now, I've read a thousand guides and people's questions, but still, I can't find a way to do it properly. What I want to do is to rotate the bits to the left, here's an example. Original number = 10000001 = 129 What I need = 00000011 = 3 I have to rotate the bits to left a certain amount of times (it depends on what the user types), here's what I did: ``` byte b = (byte)129; byte result = (byte)((byte)b << 1); Console.WriteLine(result); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); ``` The issue with this it that it causes an error (OverflowException) when I try to use the (<<) operator with that number (note that if I put a number which first bit is a 0; example: 3 = 00000011; it works as intended and it returns a 6 as a result. The problem is, if the first bit is a 1, it gives me the (OverflowException) error. I know this isn't rotating, its just a shifting, the first bit goes away and on the end of the byte a 0 pops up, and I can then change it with an OR 000000001 operation to make it a 1 (if the first bit was a 1, if it was a 0 I just leave it there).

Original source