Как генерировать уравнения сдвига битов? - PullRequest
0 голосов
/ 20 декабря 2011

Предпочтительно, чтобы это было сделано в C #.

Предположительно, у меня есть целое число 1024 .Я смогу сгенерировать эти уравнения:

4096  >> 2 = 1024  
65536 >> 6 = 1024
64    << 4 = 1024 

и так далее ...

Какие-либо подсказки, советы, руководства или идеи?

Редактировать : Хорошо, проще говоря, я хочу, например ... Эй, я даю вам целое число 1024, теперь дайте мне список возможных уравнений сдвига битов, которые всегда будут возвращать значение 1024.

Хорошо, поцарапайте это.Кажется, мой вопрос был не очень кратким и ясным.Я попробую еще раз.
Я хочу сгенерировать список возможных уравнений сдвига битов на основе числового значения.Например, если у меня есть значение 1024, как бы я сгенерировал список возможных уравнений, которые всегда возвращали бы значение 1024?

Примеры уравнений:

4096  >> 2 = 1024  
65536 >> 6 = 1024  
64    << 4 = 1024 

Аналогичным образом, если бы я попросил вас дать мне некоторые дополнительные уравнения, которые дали бы мне 5, вы бы ответили:

3  + 2 = 5  
10 - 5 = 5  
4  + 1 = 5

Я все еще слишком расплывчат?Я прошу прощения за это.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2011

Просто добавьте дополнительные '>' или '<': </p>

uint value1= 4096 >> 2;
uint value2 = 65536 >> 6;
uint value3 = 64 << 4;

http://www.blackwasp.co.uk/CSharpShiftOperators.aspx

0 голосов
/ 20 декабря 2011

Вы спрашиваете , почему эти отношения существуют?Сдвиг битов влево на 1 бит эквивалентен умножению на 2. Так 512 << 1 = 512 * 2 = 1024.Сдвиг вправо на 1 - это деление на 2. Сдвиг на 2 - это умножение / деление на 4, при этом n равно 2 ^ n.Так что 1 << 10 = 1 * 2^10 = 1024.Чтобы понять почему, запишите число в двоичном виде: в качестве примера возьмем 7:

7 -> 0000 0111b
7 << 1 -> 0000 1110b = 14
7 << 3 -> 0011 1000b = 56

Если вы уже все это знали, я прошу прощения, но вы можете сделать вопрос менее расплывчатым.

0 голосов
/ 20 декабря 2011

Вы можете изменить каждое уравнение и таким образом «сгенерировать» возможные уравнения:

1024 >> 4 == 64 

и, следовательно,

64 << 4 == 1024

Таким образом, сгенерируйте все сдвиги вправо / влево на 1024 без потери битов из-за переполнения или переполнения вашей переменной, а затем инвертируйте соответствующее уравнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...