Количество битов, необходимых для представления целого числа в 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, Как указано в правиле.