#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