Рубрики
Без рубрики

Python побитовые операторы

Узнайте о Python побитовые операторы. Они важны для многих программных приложений, включая криптографию и алгоритмы сжатия.

Автор оригинала: Robin Andrews.

Побитовые операторы И битовые манипуляции подобны рекурсии в том, что они оба тема, которые являются фундаментальными для вычислений, но объем использования вы сделаете из них, будут варьироваться в зависимости от вашего домена. Битовые манипуляции, безусловно, важно для занятий собеседованиям в компаниях, таких как «Bign» (Google, FB и т. Д.), а также другие места, где ожидается глубокое знание основных знаний и требуется. Это также очень важно при работе со встраиваемыми системами и некоторые другие области, как показано ниже.

Применения побитовых операторов в вычислениях

  • Управления собеседования и постоянная работа для больших технологий
  • Встроенные системы программирования
  • Алгоритмы шифрования и сжатия
  • Культурное осведомленность в технологическом возрасте
  • Низкоуровневое программирование
  • Работа с графикой
  • Драйверы устройств для основных операционных систем
  • Коммуникационный протокол пакетной сборки

Знание побитовых операторов также важна с точки зрения культурного образования в информационном возрасте. Технология, которая использует эти процессы, окружает нас в нашей повседневной жизни, и имеет смысл иметь некоторое понимание человеческих знаний, которые подкрепляют их существование.

Некоторые из наиболее часто используемых побитовых операторов:

  • & (побитовые и)
  • |. (побил или)
  • ~ (побитовое не)
  • ^ (побитовые хор)
  • << (побитовая левая смена)
  • >> (побитовый правый сдвиг)

Вы можете играть с этими операторами в Python Shell , Какой отличный способ получить быструю ощущение того, как работает какой-то функционал Python Python или быстро проверяет, что она ведет себя как ожидалось.

Например:

>>> 16 >> 1  # Divide by 2
8
>>> 12 << 2  # Multiply by 4
48
>>> 11 & 1   # A trick to check for even/odd
1
>>>

Эти операторы сделают гораздо больше смысла, если вы посмотрите на Двоичное представление операндов. Я предоставил какой-то код ниже, что вы можете найти полезным в своем исследовании. Имейте в виду форматирование, которое я использовал только для положительных значений.

# A couple of useful functions
print(int('00100001', 2))  # Convert binary number in string form to decimal int
print(bin(20))  # String representation of binary number

# Python Bitwise Operator Examples
# NB the output is designed to work for positive values only!

a = 24            
b = 9             

c = a & b  # Bitwise AND
print(f"{a} & {b} = {c}")
print()
print(f"  {bin(a)[2:].zfill(8)}")
print(f"& {bin(b)[2:].zfill(8)}")
print("----------")
print(f"= {bin(c)[2:].zfill(8)}")
print()

c = a | b  # Bitwise OR
print(f"{a} | {b} = {c}")
print()
print(f"  {bin(a)[2:].zfill(8)}")
print(f"| {bin(b)[2:].zfill(8)}")
print("----------")
print(f"= {bin(c)[2:].zfill(8)}")
print()

c = a ^ b  # Bitwise XOR
print(f"{a} ^ {b} = {c}")
print()
print(f"  {bin(a)[2:].zfill(8)}")
print(f"^ {bin(b)[2:].zfill(8)}")
print("----------")
print(f"= {bin(c)[2:].zfill(8)}")
print()

b = 2
c = a >> b  # Right-shift by 2. I.e a // 4
print(f"{a} >> {b} = {c}")
print()
print(f"      {bin(a)[2:].zfill(8)}")
print(f">> {b}  {bin(b)[2:].zfill(8)}")
print("--------------")
print(f"=     {bin(c)[2:].zfill(8)}")
print()

b = 2
c = a << b  # Left-shift by 2. I.e a * 4
print(f"{a} << {b} = {c}")
print()
print(f"      {bin(a)[2:].zfill(8)}")
print(f"<< {b}  {bin(b)[2:].zfill(8)}")
print("--------------")
print(f"=     {bin(c)[2:].zfill(8)}")
print()

Основная часть кода даст следующий выход:

24 & 9 = 8

  00011000
& 00001001
----------
= 00001000

24 | 9 = 25

  00011000
| 00001001
----------
= 00011001

24 ^ 9 = 17

  00011000
^ 00001001
----------
= 00010001

24 >> 2 = 6

      00011000
>> 2  00000010
--------------
=     00000110

24 << 2 = 96

      00011000
<< 2  00000010
--------------
=     01100000

Вы можете конечно изменять значения А и B выполнять разные расчеты.

Программа Python с использованием побитовых операторов

Следующая программа использует Python BiteWise операторы для сбора полномочий 2 Это можно использовать для представления десятичного числа, предусмотренного в качестве аргументов. Посмотрите, можете ли вы понять, как это работает, особенно & и << побитовые операторы. Добавьте операторы печати на выходные промежуточные значения, если он поможет вам увидеть, что происходит на определенном шаге.

def binary_decomp(n):
    powers = []
    i = 1
    while i <= n:
        if i & n:
            powers.append(i)
        i <<= 1
    return powers


print(binary_decomp(10))
print(binary_decomp(32))
print(binary_decomp(127))
print(binary_decomp(-24))
print(binary_decomp(0))

Выход:

[2, 8]
[32]
[1, 2, 4, 8, 16, 32, 64]
[]
[]
>>>

Теперь вы знаете о битовых операторах – Python. Я надеюсь, что эти знания вам хорошо служат. Счастливые вычисления!