Как перевести число в двоичную систему с
Перейти к содержимому

Как перевести число в двоичную систему с

  • автор:

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

Двоичная система счисления — позиционная система счисления с основанием 2.

Шестнадцатеричная система счисления — позиционная система счисления по целочисленному основанию 16.

\begin 110_ &= 1\times2^+1\times2^+0\times2^=6_ \\ \\ 6_ &= 110_:\\ \end

6 / 2 = 3, Остаток 0, (LSB — Least Significant Byte)
3 / 2 = 1, Остаток 1
1 / 2 = 0, Остаток 1, (MSB — Most Significant Byte)

Десятичное число (положительное) Двоичное число
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
16 10000
32 100000
64 1000000
128 10000000
256 100000000

Перевод чисел из одной системы счисления в любую другую онлайн

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

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

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

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

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

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

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

Последние 20 расчетов на этом калькуляторе

  1. Перевод 0.0E5604 из шестнадцатиричной в двоичную CC Выполнен: 2024-03-27 00:28 МСК
  2. Перевод 0.E68 из шестнадцатиричной в десятичную CC Выполнен: 2024-03-11 15:50 МСК
  3. Перевод 0.E66 из шестнадцатиричной в десятичную CC Выполнен: 2024-01-07 01:07 МСК
  4. Перевод 0.E14 из шестнадцатиричной в десятичную CC Выполнен: 2023-12-28 19:35 МСК
  5. Перевод 0.000 из десятичной в двоичную CC Выполнен: 2023-12-25 23:30 МСК
  6. Перевод 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010101 из двоичной в десятичную CC Выполнен: 2023-12-22 11:38 МСК
  7. Перевод 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010101 из двоичной в десятичную CC Выполнен: 2023-12-22 11:35 МСК
  8. Перевод 0.E00000 из шестнадцатиричной в двоичную CC Выполнен: 2023-12-13 10:55 МСК
  9. Перевод 0.0 из 1-ричной в десятичную CC Выполнен: 2023-12-12 20:35 МСК
  10. Перевод 0.E08 из шестнадцатиричной в десятичную CC Выполнен: 2023-12-09 18:08 МСК
  11. Перевод 0.0E16 из шестнадцатиричной в десятичную CC Выполнен: 2023-12-06 14:21 МСК
  12. Перевод 0. из восьмеричной в двоичную CC Выполнен: 2023-11-29 02:42 МСК
  13. Перевод 0.E07 из шестнадцатиричной в 5-ричную CC Выполнен: 2023-11-27 13:17 МСК
  14. Перевод 0.0 из шестнадцатиричной в двоичную CC Выполнен: 2023-11-24 12:03 МСК
  15. Перевод 0.e10 из шестнадцатиричной в десятичную CC Выполнен: 2023-11-19 14:46 МСК
  16. Перевод 0.0E17 из шестнадцатиричной в двоичную CC Выполнен: 2023-11-13 14:38 МСК
  17. Перевод 0.000 из десятичной в восьмеричную CC Выполнен: 2023-11-06 20:48 МСК
  18. Перевод 0.E16 из шестнадцатиричной в десятичную CC Выполнен: 2023-11-01 21:36 МСК
  19. Перевод 0.00000000000000000 из двоичной в десятичную CC Выполнен: 2023-10-30 15:34 МСК
  20. Перевод 0.0E56042 из шестнадцатиричной в двоичную CC Выполнен: 2023-10-30 08:25 МСК

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

Вы можете сохранять ваши расчеты и они будут отображаться здесь.

Для сохранения расчета воспользуйтесь кнопкой под формой калькулятора.

История расчетов
Сохранить расчет

Сохраненный расчет будет доступен только в текущем браузере.
Вы можете сохранить всего не более 5 расчетов.

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

Поделиться

Поделиться расчетом

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

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

Как перевести

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

  1. Делим десятичное число на 2 и записываем остаток от деления.
  2. Результат деления вновь делим на 2 и опять записываем остаток.
  3. Повторяем операцию до тех пор пока результат деления не будет равен нулю.
  4. Запишем полученные остатки в обратном порядке и получим искомое число.

Переведем число 37510 в двоичную систему:

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

Вы делаете неправильно. Вы пытаетесь построить такое число, чтобы если его вывести как десятичное, получилось двоичное представление числа.

Это не правильно, так делать не надо, это лишь приведёт к проблемам. Нужно различать само число (переменную числового типа) и его представление в той или иной системе счисления (строку).

#include std::string to_binary_string(unsigned int n) < std::string buffer; // символы ответа в обратном порядке // выделим память заранее по максимуму buffer.reserve(std::numeric_limits::digits); do < buffer += char('0' + n % 2); // добавляем в конец n = n / 2; >while (n > 0); return std::string(buffer.crbegin(), buffer.crend()); // разворачиваем результат > 

Для случая, когда вам нужно обрабатывать и отрицательные числа, нужна небольшая модификация:

#include #include std::string to_binary_string(int n) < if (n == std::numeric_limits::min()) return "-1" + std::string(std::numeric_limits::digits, '0'); std::string buffer; buffer.reserve(std::numeric_limits::digits + 1); // +1 для минуса bool negative = (n < 0); if (negative) n = -n; do < buffer += char('0' + n % 2); n = n / 2; >while (n > 0); if (negative) buffer += '-'; return std::string(buffer.crbegin(), buffer.crend()); > 

Это решение естественно обобщается на произвольный тип:

#include #include #include template std::string to_binary_string(T n) < static_assert(std::is_integral::value, "Integer required."); if (std::numeric_limits::is_signed && n == std::numeric_limits::min()) // (*) < // переполнение в знаковом типе - UB, избегаем его return "-1" + std::string(std::numeric_limits::digits, '0'); > std::string buffer; buffer.reserve(std::numeric_limits::digits + 1); // +1 для возможного минуса bool negative = (n < 0); if (negative) n = -n; // это можно делать вследствие проверки (*) do < buffer += char('0' + n % 2); n = n / 2; >while (n > 0); if (negative) buffer += '-'; return std::string(buffer.crbegin(), buffer.crend()); > 

(Код частично украден из этого ответа.)

Величина std::numeric_limits::digits представляет количество бит в знаковом целочисленном типе, участвующих в представлении значения (без учёта знакового бита и битов заполнения (padding bits)), соответственно даёт количество двоичных цифр в самой длинной строке (за исключиением отрицательного минимума).

Отслеживать
ответ дан 25 июн 2015 в 20:05
207k 29 29 золотых знаков 294 294 серебряных знака 528 528 бронзовых знаков
да вы правы, есть очень много вариантов. человек выбрал это.
25 июн 2015 в 20:10

@SaidolimDjuraev: Мне кажется, что число, которое будучи выведенным как десятичное будет выглядеть, как двоичное представление другого числа, имеет достаточно слабую семантику. Кроме того, с строкой можно представить как угодно большие числа, а вот число 255 в двоичном виде будет 11111111 и не поместится в один байт в предлагаемой схеме.

25 июн 2015 в 20:21
согласен вы правы
25 июн 2015 в 20:29
@wololo: спасибо, с вашими правками вышло изящнее
7 мая 2021 в 11:06

  1. Вы отрезаете последнее значение при num=num/2; Это должно быть в конце цикла.
  2. Значения нужно выводить в обратном порядке.

Вот изменил код. Проверьте.

тут d это разряд. Потому что нужно обратно все печатать.

#include using namespace std; int main() < int num=0, t=0, d=1; cout"; cin>>num; while(num) < t +=(num%2)*d; //coutcout
Отслеживать
ответ дан 25 июн 2015 в 13:32
8,341 4 4 золотых знака 26 26 серебряных знаков 48 48 бронзовых знаков
Вы имели в виду это? while(num) < t=num%2; cout<int a; int tmp = 1; std::cin >> a; if (a < 0) < a *= -1; std::cout if (a == 0) std::cout 1) < tmp = tmp >> 1; std::cout > 

Отслеживать
ответ дан 6 мая 2021 в 10:49
11 2 2 бронзовых знака
6 мая 2021 в 10:51

Вот 2 функции, которые я когда-то давно писал.

Первая функция переводит из 10-ой системы счисления целые числа в любую другую систему счисления от 2 до 36.

std::string TransferDecimalToAny(long long int number, const unsigned int &base) < const char *DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz"; bool FlagInverse = false; std::string reversString, stringInBase; if (base < 2 || base >36) < std::cout if (number < 0) < FlagInverse = true; number *= -1; >stringInBase += DIGITS[number % base]; number = number / base; while (number) < stringInBase += DIGITS[number % base]; number = number / base; >if (FlagInverse == true) reversString = "-"; for (int i = stringInBase.length() - 1; i >= 0; i--) reversString += stringInBase[i]; return reversString; > 

А вторая функция также переводит из 10-ой системы счисления в любую другую систему счисления от 2 до 36, но только уже дробные числа причем с заданной точностью accuracy.

std::string TransferDecimalToAny(long double number, const unsigned int &base, const int &accuracy) < const char *DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz"; int iter = 0, tmp = 0; bool FlagInverse = false; if (number < 0) < FlagInverse = true; number *= -1; >long long int integer; long double integer_tmp, fractional; std::string reversString, stringInBase; if (base < 2 || base >36) < std::cout fractional = modf(number, &integer_tmp); integer = static_cast(integer_tmp); stringInBase += DIGITS[integer % base]; integer = integer / base; while (integer) < stringInBase += DIGITS[integer % base]; integer = integer / base; >if (FlagInverse == true) reversString = "-"; for (int i = stringInBase.length() - 1; i >= 0; i--) reversString += stringInBase[i]; reversString += '.'; while (iter < accuracy) < fractional *= base; fractional = modf(fractional, &integer_tmp); tmp = static_cast(integer_tmp); reversString += DIGITS[tmp]; iter++; > return reversString; > 

А вызывать их соответственно следующим образом:

long long int number1 = -54605429; long double number2 = -6546747.63768658; std::cout > base; std::cout  

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *