Сколько единиц в двоичном представлении числа 71

от admin

Перевод 71 из десятичной в двоичную систему счисления

Калькулятор перевода чисел имеет одно поле для ввода. В это поле необходимо ввести число которое Вы хотите перевести.

После этого Вам обязательно нужно указать в какой системе счисления Вы его ввели. Для этого под полем ввода есть графа "Его система счисления".

Если Вы не нашли своей системы, то выберите графу "другая" и появится поле ввода . В это поле необходимо вписать основание системы одним числом без пробелов.
Далее необходимо выбрать в какую систему хотите перевести данное число. Если Вы опять не нашли нужной системы то введите ее в графе "другая".

После нажмите кнопку "ПЕРЕВЕСТИ" и результат появится в соответствующем поле. Если Вы хотите получить подробный ход решения, то нажмите на соответствующую ссылку.

После проведения расчета нажмите на кнопочку ‘Расчет не верен’ если Вы обнаружили ошибку. Или нажмите ‘расчет верный’ если ошибок нет.

Научиться переводить число из одной системы счисления в другую очень просто.

Любое число может быть легко переведено в десятичную систему по следующему алгоритму:

Каждая цифра числа должна быть умножена на основание системы счисления этого числа возведенное в степень равное позиции текущей цифры в числе справа налево, причём счёт начинается с 0.

Переводите число 71 из десятичной системы счисления в двоичную систему счисления в ответе напишите количества единиц

Для этого нам необходимо выполнить деление исходного числа на 2. Если результат деления больше или равен 2, надо продолжать делить на 2 до того , пока результат деления не станет равен 1.
71/2=35(остаток 1)
35/2=17(остаток 1)
17/2=8(остаток 1)
8/2=4(остаток 0)
4/2=2(остаток 0)
2/2=1(остаток 0; результат деления равен 1 ).

Теперь надо выписать результат последнего деления и все остатки от деления в обратном порядке.
Получается число 1000111 в двоичной системе счисления.

Переводите число 71 из десятичной системы счисления в двоичную систему счисления в ответе напишите количества единиц в двоичной

Здесь значок «|» означает «ИЛИ», то есть подразумевается, что в искомом документе есть хотя бы одно из этих слов.

Var
i, s, k, n: integer;

begin
for i := 1000 to 9999 do begin
n := i;
s := 0;
while n > 0 do begin
s := s + (n mod 10) * (n mod 10);
n := n div 10;
end;
if (s mod 2 = 0) or (s mod 3 = 0) then begin
k := k + 1;
writeln(i, ‘ ‘, s);
end;
end;
writeln(k);

Русские Блоги

В работе часто встречаются следующие проблемы: Для 32-битного целого числа n без знака найдите число 1 в двоичном представлении значения, например, когда значение = 0x05 (0b0101), возврат 2, значение = 0x8e (0b1000 1110 ) Когда, вернитесь к 4. Ниже приведены несколько часто используемых решений, а результаты сравнения этих нескольких методов приведены в конце статьи.

Метод первый: основной метод

Базовый метод является самым простым для понимания, он проходит напрямую через каждый бит, код выглядит следующим образом, идея обоих методов одинакова, но первый метод должен быть выполнен в цикле 32 раза, а второй метод может завершить цикл. рано и эффективнее. Немного выше. Окончательный тест рассчитывается с использованием метода цикла for.

Метод второй: быстрый метод

Этот метод относительно быстрый и зависит только от количества единиц в значении. Если в двоичном представлении значения n единиц, то этому методу нужно выполнить цикл только n раз. Принцип состоит в том, чтобы постоянно очищать крайнюю правую единицу в двоичном представлении значения и одновременно накапливать счетчик, пока значение не станет 0, код выглядит следующим образом.

Например, когда value = 0x0A (0b1010), после первого входа в цикл while значение = 0b1010 & 0b1001 = 0xb1000, count = 1; после второго входа в цикл while value = 0b1000 & 0b0111 = 0 , count = 2; В этот момент значение было 0, и функция возвращает 2.

Метод 3: метод справочной таблицы

Принцип метода таблицы поиска относительно прост. Он напрямую основан на значении значения для запроса данных. Позиция бита установлена ​​на 1. Идея состоит в том, чтобы изменить пространство на время. Таблица может быть 4-битной, 8-битной, 16-битной, 32-битной. По сравнению с 32-битной, 4-битная более экономит место, но время вычисления относительно велико. Вот компромисс между временем и пространством. Например, значение имеет тип uint32_t При использовании 4-битной таблицы для запроса ему необходимо запросить 8 раз, в то время как при использовании 32-битной таблицы для запроса ему потребуется только 1 раз. Метод запроса к 8-битной таблице — более скромный метод.

Примечание: если таблица изменена с помощью const, при запросе будет читаться FLASH.Если она не определена как const, таблица будет скопирована в RAM, а RAM будет прочитана при запросе. Скорость чтения RAM выше, чем чтения FLASH.

Читать:
Как сделать config в python

Метод 4: Расширенный метод (параллельный метод)

Этот метод очень грубый, его нелегко понять на первый взгляд, на самом деле он заключается в сложении всех битов в значение. Каждый раз добавляется 1 соседняя группа битов, первый раз накапливаются 2 соседних бита, второй раз накапливаются 4 соседних бита и в третий раз накапливаются 8 смежных битов и так далее.

Чтобы облегчить объяснение, мы можем сначала упростить тему, предположив, что значение является типом данных uint2_t (тип uint2_t на самом деле не существует, это гипотетически, всего 2 бита), а затем сколько бит в значении значение 1 может быть вычислено напрямую. Используйте следующую строку кода, чтобы это сделать. Это нужно понимать с первого взгляда, правда? То есть выньте бит 1 и добавьте его к биту 0, и сумма сложения будет числом, установленным в 1.

Хорошо, это немного сложнее. Предполагая, что значение является типом данных uint4_t, тогда код можно записать следующим образом:

Наконец, возьмем пример, когда значение имеет тип uint8_t.

Например, если значение равно 0x6D (0b01101101), результат будет 0 + 1 + 1 + 0 + 1 + 0 + 1 + 1 = 5. На рисунке ниже показан процесс вычисления: сначала сложите их соседние двоичные цифры, затем сложите две соседние цифры и, наконец, сложите соседние четыре цифры. При добавлении 0x6D в расчет первый шаг равен 0b01011001, второй шаг — 0b00100011, а третий шаг — 0b00000101, что равно 5. После выяснения ситуации с 2, 4 и 8 битами 32-битная ситуация является той же самой программой. Кроме того, можно отметить, что при вычислении типа uint2_t его нужно вычислять один раз; при вычислении типа uint4_t его нужно вычислять дважды; при вычислении типа uint8_t его нужно вычислять 3 раза. Тогда мы можем догадаться, что его нужно вычислить 5 раз при вычислении типа uint32_t и 6 раз при вычислении типа uint64_t, то есть。

Метод 5: Восьмеричный метод

Позвольте мне сначала пояснить один момент: число, начинающееся с 0, является восьмеричным числом, а число, начинающееся с 0x, является шестнадцатеричным числом.В приведенном выше коде используются три восьмеричных числа. Запишите двоичное представление значения, а затем разделите каждые 3 бита на группу, найдите число 1 в каждой группе и затем выразите его в двоичной форме. Например, значение = 50, его двоичное представление — 110010, после группирования — 110 и 010, число 1 в этих двух группах — 2 и 3. 2 соответствует 010, 3 соответствует 011, поэтому после окончания первого строка кода, tmp = 010011, как это реализовано? Поскольку каждая группа из 3 битов, десятичные числа, соответствующие этим 3 битам, могут быть выражены в форме 2 ^ 2 * a + 2 ^ 1 * b + c, то есть в форме 4a + 2b + c, где значения A, b и c равны 0 или 1, если это 0, это означает, что соответствующая двоичная цифра равна 0, если это 1, это означает, что соответствующая двоичная цифра равна 1, поэтому значение a + b + c также равно 1 в двоичном числе 4a + 2b + c Число вверху. Например, десятичное число 6 (0110) = 4 * 1 + 2 * 1 + 0, где a = 1, b = 1, c = 0, a + b + c = 2, поэтому в двоичном представлении их два из 6 Один. Теперь вопрос, как получить a + b + c? Обратите внимание, что в битовой операции сдвиг на один бит вправо эквивалентен делению на 2. Используйте это свойство!

4a + 2b + c сдвиг вправо равен 2a + b, 4a + 2b + c сдвиг вправо равен a, а затем вычитается, 4a + 2b + c — (2a + b) — a = a + b + c, Это то, что делает первая строка кода.

Функция второй строки кода: на основе первой строки накопить количество единиц в двух соседних группах в tmp. Поскольку некоторые группы были добавлены один раз в процессе накопления, эти дополнительные части должны быть отброшены., Это роль & 030707070707, потому что конечный результат может быть больше 63.

Следует отметить, что после первой строки кода с правой стороны есть только четыре возможности для каждого смежного 3 бита, а именно 000, 001, 010, 011, почему? Потому что количество единиц в каждых 3-х битах не больше трех. Следовательно, в следующем добавлении нет проблемы переноса, потому что 3 + 3 = 6, что меньше 8, и переноса не будет.

Запустите указанные выше 5 методов на однокристальном микрокомпьютере, чтобы сравнить эффективность работы. Одночиповый компьютер — Pandora STM32L475, основная частота 80 МГц, метод тестирования следующий.

Пять алгоритмов тестируются с использованием вышеуказанных методов.После того, как каждый алгоритм выполняется 100000 раз, рассчитывается время выполнения.Конечные результаты выглядят следующим образом.

Похожие статьи