Автор оригинала: 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. Я надеюсь, что эти знания вам хорошо служат. Счастливые вычисления!