Сколько битов используется для обработки битов в python?

#python #integer #bit-manipulation

Вопрос:

Тип int данных в Java имеет 32 бита, поэтому, когда мы выполняем битовые манипуляции в Java, это произойдет в 32 бита. Но в Python нет ограничений на целочисленный тип данных, поэтому для скольких битов в python выполняются битовые манипуляции?

Например, 2 и 3 в java будут выполняться в 32 битах, что

0000 0000 0000 0000 0000 0000 0000 0010
amp;
0000 0000 0000 0000 0000 0000 0000 0011

Но то же самое произойдет для количества битов в python

то есть … будет ли это 10 amp; 11

или 0010 amp; 0011

или что

Комментарии:

1. Сколько бы битов ни требовалось для соответствующих чисел.

Ответ №1:

Пожалуйста, поправьте меня, если я ошибаюсь

До Python 3.1 не было простого способа определить, как Python внутренне представлял конкретное целое число, т. Е. Сколько битов было использовано. Python 3.1 добавляет метод bit_length() к типу int, который делает именно это.

ресурс https://wiki.python.org/moin/BitManipulation

 x=7
y=30
print( (x|y).bit_length() )
 

Выход : 5

Ответ №2:

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

 >>> (0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef ^ 
...  0x64004ee264004ee264004ee264004ee264004ee264004ee264004ee264004ee2 == 
...  0xbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00d)
True
 

Если вы пытаетесь сопоставить выходные данные подпрограмм на других языках, вы можете ограничить результаты определенным количеством битов, замаскировав их соответствующей битовой маской. result amp; 0xff для 1 байта, result amp; 0xffff для 2 байтов, result amp; 0xffffffff для 4 байтов и т. Д.

…будет ли это 10 amp; 11 или 0010 amp; 0011 ?

Нет никакой разницы. 0b10 == 0b0010 и. 0b11 == 0b0011 Это точно такие же числа; заполнение нуля слева ничего не меняет. Вы можете думать об этих числах как о имеющих бесконечное количество нулей слева.

Я не нарочно туплю, обещаю тебе. Вы спрашиваете: «Это А или В?», и ответ: «И то, и другое. А и В-это одно и то же».

В Java, C , C# или любом другом языке с целочисленными типами фиксированной ширины тот факт, что они выполняют 16-разрядные, 32-разрядные или 64-разрядные операции с битами, оказывает заметное влияние на поведение вашего кода. Выходные результаты усекаются до разрядности входных типов. Вам всегда нужно думать о переполнении и о том, как могут обернуться числа. Добавление двух чисел может привести к уменьшению числа. Манипуляция битами фиксированной ширины имеет видимый эффект, о котором вы должны подумать.

Python использует целые числа с неограниченной точностью, поэтому такого не существует. Да, если вы заглянете под капот, чтобы посмотреть, как работает библиотека целых чисел неограниченной точности, где-то там будут использоваться целые числа фиксированного размера. В конечном счете, он выполнит инструкции по сборке, которые выполняют 32-разрядные или 64-разрядные XOR или что-то в этом роде. Но все это является внутренним для Python. Это не видно снаружи нам, пользователям. Внешне видимое поведение заключается в том, что целые числа кажутся обладающими неограниченной точностью. Мы можем думать о каждом числе как о концептуально имеющем бесконечное число 0 бит слева (или бесконечное число 1 бит, если число отрицательное).

Комментарии:

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

2. Ответ по-прежнему звучит так: «нет предела». На практике он, вероятно, будет использовать наименьший собственный тип, который имеет смысл для операции, но это внутренняя деталь реализации.

Ответ №3:

Что ж, это действительно интересный вопрос.
Я не уверен в ответе, однако я думаю, что это может зависеть от битов большего числа.
Так, например :

 a = 2
b = 3
print(bin(a))
print(bin(b))
print(aamp;b)
b=11
print(bin(a))
print(bin(b))
print(aamp;b)
 

Тогда выход будет :

 0b10
0b11
2
0b10
0b1011
2
 

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

 2 = 10
3 = 11
 

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

 2 = 0010
11 = 1011
 

Итак, вот что я заметил, пожалуйста, скажите мне, абсолютно ли я неправ или нет.

Комментарии:

1. Пожалуйста, обратитесь :[ wiki. python.org/moin/BitManipulation] тема : Целые числа Python