Member 13765066 Ответов: 1

Количество битов, необходимых для представления целого числа в Python


Пожалуйста, помогите мне разобраться в этой проблеме.

Количество битов, необходимых для представления целого числа n, задается округлением log2(n) и последующим добавлением 1. Например, log2(100) составляет около 6.643856. Округляя это значение и затем добавляя 1, мы видим, что нам нужно 7 битов, чтобы представить 100.

Но когда я использую вышеприведенный метод, чтобы узнать количество битов, необходимых для представления sys.maxsize (9,223,372,036,854,775,807), например

математика.отчет(представление sys.параметр maxsize,2) дает 63

Приведенное выше значение непосредственно дает ответ, то есть нам нужно 63 бита для представления sys.maxsize (9,223,372,036,854,775,807)

math.log(8,2) дает 3,0

Для 8 мы должны снова применить описанный выше метод (3+1), то есть нам нужно 4 бита для представления 8.

Можете ли вы объяснить, почему?

Что я уже пробовал:

math.log(8,2) дает 3,0 (но количество необходимых битов равно 4)


math.log(sys.maxsize,2) дает 63 (здесь количество необходимых битов равно 63)

gggustafson

Хотя он и не знаком с Python, большинство систем счисления имеют наибольшее положительное значение, которое на один бит меньше по длине, чем самое большое отрицательное число (ведущий знаковый бит)

PIEBALDconsult

Почему бы вам не воспользоваться потолком?

Member 13765066

Если я объясню это дальше;

Для небольшого целого числа, такого как 8, мы берем log base2 из 8. В результате получается 3, затем мы добавляем 1 к 3 и получаем 4. таким образом, 4 бита необходимы для представления 8.

Для большого целого числа, такого как 9223372036854775807, мы берем log base2 из 9223372036854775807. Результат-63. Здесь нам не нужно добавлять 1. Он непосредственно дает количество битов, то есть 63 бита необходимы для представления 9223372036854775807.

Теоретически в python говорится, что количество битов, необходимых для представления целого числа n, задается округлением log2(n) и последующим добавлением 1. Но это кажется неправильным для большего целого числа?? Вот чего я никак не мог понять.

gggustafson

Вам не приходило в голову, что бревенчатая база 2 ( 9223372036854775807) - это 62.999999999999999999843582690243, а пол ( бревенчатая база 2 ( 62.999999999999999999843582690243)) - 62? Поэтому вам нужно добавить 1, Как указано в правиле.

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Пожалуйста, помогите мне разобраться в этой проблеме.

Как сказать ?
Просто преобразуйте все эти числа в основание 2 (radix) и подсчитайте количество цифр, это количество битов.
Цитата:
Он непосредственно дает количество битов, то есть 63 бита необходимы для представления .

Это происходит потому, что 63-это округленное значение примерно 62,999...


gggustafson

Теория не ошибочна; ваша точность логарифмической базы 2 не является таковой или вы случайно отбрасываете точность (округляя), прежде чем взять слово.