2013-02-10 4 views
1

Если у вас есть двоичное число, скажем, 1010 (что равно 10 в базе 10), говорит, что деление на два приведет к удалению первой цифры (что делает ее в итоге 010), истиной?Значение удаления первой цифры из двоичного числа?

В основном, как удалить первую цифру (т. Е. Если двоичное число равно 0 или 1, то это будет как ничто)? Я не хочу кода или чего-то еще, я просто хочу знать, как то, что вы разделите или размножаете на два.

Также не учитывайте ни один из левых самых нулей двоичного числа.

+0

Подразделение на 2 удаляет наименее значащую цифру или первую цифру, считая справа налево. Может быть легко достигнуто с помощью правого сдвига '>>' – nhahtdh

ответ

2

Он работает так же, как и в базе десять. Число 401, без его первой цифры, равно 1. Вы вычитали 400, нет? Теперь, чтобы разделить на десять, вы должны сдвинуть цифры справа. 401 сдвинуто вправо 040. 401/10 = 40. Обратите внимание, что 1 отбрасывается, потому что мы работаем с целым делением.

Так что в двоичном виде это точно то же самое, но с полномочиями 2. Удаление первого бита не DIVIDE на два. Он ПОДТВЕРЖДАЕТ значение своей позиции. Таким образом, 101b (что равно 4 + 1 = 5) без его наибольшего бита составляет 001b или 1 десятичный. Вычитание: 5 - 4 = 1.

Чтобы разделить на два, вы смещаете биты вправо, как и в основании 10. Таким образом, 101b станет 010b, что равно 2 десятичным. 5/2 == 2 (мы отбрасываем дробную часть с целым делением)

Имеют смысл? Если вы когда-либо путаетесь в бинарном режиме, просто подумайте о том, как позиции & занимают позиции в базе десять, а вместо десятичных значений используют две.

-1

Удаление цифры, как изменить его на 0. Изменение 1010 к 0010 осуществляется путем вычитания 1000: 1010 - 1000 = 0010.

+0

Не всегда очевидно, что вам нужно вычесть 1000 из 1010, чтобы получить 10. Откуда вы знаете, что это 1000, а не 10000 или 100? Ответ aaaaaa123456789 на эту проблему. – nhahtdh

1

Если на «первой цифрой» вы имеете в виду «первый значащий разряд», то, что вы ищете что-то вроде number and not (1 shl (int(log number/log 2))), где and и not - поразрядные операции, shl означает сдвиг влево, а int округляет (никогда) до целого. log - это всего лишь логарифм, в любой базе (то же основание для обоих случаев).

Если «первая цифра» означает цифру в некоторой n-й позиции (пусть крайнее правое положение будет 0, считая влево), тогда вы просто сделаете number and not (1 shl position).

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