2017-01-22 4 views
0

Я хочу знать, есть ли способ найти последние бит данного десятичного числа. Я хочу рассчитать это вручную.Как найти последние биты (двоичные) заданного десятичного числа вручную

Например, если у меня есть 133 и 255, как я могу найти последние два бита в двоичном формате, не разделяя их дважды на 2?

+0

Что вы подразумеваете под «последними битами» - наиболее значимыми или наименее значимыми? – MBo

+0

i означает наименее значащие биты – tzoella

+0

Возможный дубликат [Мне нужна помощь по Bit Twiddling] (http://stackoverflow.com/questions/16549303/i-need-help-on-bit-twiddling) –

ответ

1

Вот простой способ найти два младших значащих разряда десятичного числа, подходящих для вашей головы.

Вам нужны только последние две десятичные цифры, поэтому отбросьте (мысленно) остальные. Таким образом, ваши примеры равны 33 и 55. Посмотрите на последнюю десятичную цифру: если она нечетная, младшая значащая цифра равна 1; если он четный, наименьшая значащая цифра равна 0. В ваших примерах последние цифры составляют 3 и 5, поэтому они оба имеют последнюю двоичную цифру 1.

Если двоичная цифра, которую мы получили на последнем шаге, равнялась 1 , вычтите 1 из чисел. Итак, вашим примерам теперь 32 и 54. Теперь мы смотрим на обе последние десятичные цифры. Если последняя десятичная цифра делится на 4 (т. Е. Равна 0, 4 или 8), а следующая десятичная цифра четна, следующая двоичная цифра равна 0. Если последняя десятичная цифра не равна делится на 4 (т. е. 2 или 6), а следующая десятичная цифра нечетна, следующая двоичная цифра равна 0. В противном случае следующая двоичная цифра равна 1. В первой например, где теперь мы имеем 32, последняя десятичная цифра равна 2, а не в первом списке, а во втором, а следующая-последняя десятичная цифра нечетна, поэтому следующая двоичная цифра равна 0. В ваш второй пример, где у нас теперь 54, последняя десятичная цифра - 4, в первом списке, а следующая-последняя десятичная цифра нечетна, поэтому следующая-последняя двоичная цифра равна 1. Следовательно, 133 заканчивается с 01 в двоичном, а 255 заканчивается на 11 в двоичном формате.

Если вам не нравится последнее правило, вы можете выразить его по-разному. Если двузначное число на этом шаге делится на 4, следующая двоичная цифра равна 0, в противном случае это 1. В ваших примерах 32 делится на 4, поэтому мы получаем 0 бит, но 54 не является делится на 4, поэтому мы получаем 1 бит. Результаты те же, но этот второй подход требует разделения, которого вы, похоже, хотите избежать, в то время как первый подход избегает деления, но требует больше работы с памятью.

Смежные вопросы