Длина длинного числа в двоичном представлений

программирование программы математика

есть длинное десятичное число (язык c++)
как узнать сколько будет знакомест в его двоичном представлений ??
про логарифм понятно ,но как его применить для длинного ( ) числа ?
PS: Число знакомест в десятично все же ограничено unsigned long int

Примечание:
Речь идет о числах порядка от сотен знакомест
Например : 999999......99999999999999999999999999999
всего тысяча знакомест
Ответы:
Никаких логарифмов. unsigned long 4 байта, то есть 32 бита.
Просто делай в цикле СДВИГ влево пока старший разряд не станет 1 (для проверки умножить побитово на 0x80000000). Сколько раз пришлось сдвинуть - столько и отними от 32. Перед входом в цикл проверь на 0.
Если приблизительно, то это логарифм этого числа по основанию 2, то есть примерно число десятичных знаков разделить на десятичный логарифм двойки - получится с точностью +-2 или +-1 даже
ЗЫ
Короче теперь время есть и подумать и отписаться серьезнее:
1. Посчитай число десятичных знаков. в изначальном сичле
2. Возьми число 0,первые цифры твоего числа. Чем больше возмешь, тем меньше вероятность, что ошибешьс,я правда на практике 4-5 знаков будет почти всегда достаточно. Возьми у этого числа десятичный логарифм
3. Сложи эти 2 числа (второе число будет дробным и отрицательным, но не очень отрицательным)
4. Раздели это на десятичный логарифм двойки
5. Округли, путем обрезания целой части и прибавь 1
Делить длинное число на 2 до потери пульса, т.е. пока оно не станет равно нулю.
Ну или наоборот, найти две степени двойки, между которыми находится твое число, т.е. умножать на 2, начиная с единицы.
Но если у тебя в числе действительно может быть 4 миллиарда цифр, то надо придумать что-то другое.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.