associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

BitwiseOperators

Python possui 6 operadores obscuros. Os operadores binários <<, >>, &, |, ~, e ^.

A base numérica binária é composta apenas de dois algarismos(0 e 1), enquanto a base decimal é composta de dez(0, 1, 2, 3, 4, 5, 6, 7, 8 e 9). A forma como os números são representados é drásticamente diferente. Por exemplo: 1 é representado como 1. 2 é representado como 10. 3 é representado como 11. 4 é representado como 100. 5 é representado como 101.

...e assim vai. O número 987123 é representado como 11110000111111110011.

Isso é binário. Na base decimal você pode representar nove como 9. Um dez é representado como 10, ou seja, você adiciona mais um dígito, para indicar uma dezena. Para mais informações, veja http://en.wikipedia.org/wiki/Binary_numeral_system .

Os operadores binários são diferentes dos operadores "normais" porque eles não encaram os números "14" e "9" como 14 e 9, mas sim como as sequências de bits que compõem esses números, ou seja, 1110 e 1001. Vejamos o que cada operador faz:

x << y

  • Retorna "x" com os seus bits movidos "y" casas à esquerda, adicionando zeros aos bits "novos" da direita. Isso é a mesma coisa que multiplicar x por 2**y. Exemplo:
    • 14 << 9 # decimal 7168

      1110 << 1001 # binario 1110000000000

x >> y

  • Retorna "x" com seus bits movidos "y" casas à direita. Isso é o mesmo que x // 2 ** y. Exemplo:
    • 14 >> 9 # decimal 0 2 >> 1 #decimal 1

      1110 >> 1001 # binario 0 10 >> 1 # binario 1

x & y

  • Realiza um "E" binário. Cada bit da saída é 1 se ambos os bits correspondentes em "x" E "y" forem 1, do contrário, retorna 0. Exemplo:
    • 14 & 9 # decimal 8

      1110 & 1001 # binario 1000

x | y

  • Realiza um "OU" binário(OU inclusivo). Cada bit da saída é 0 se ambos os bits correspondentes em "x" E "y" forem 0, do contrário, retorna 1. Exemplo:
    • 14 | 9 # decimal 15 1110 | 1001 # binario 1111

^

  • Realiza um OU exclusivo binário. Cada bit da saída é o mesmo ao bit correspondente em "x" se aquele bit em "y" for 0 e for o complemento do bit em x se o complemento daquele bit em "y" for 1. Exemplo:
    • 14 ^ 9 # decimal 7 1110 ^ 1001 # binario 0111

~x

  • Retorna o complemento de "x". Entenda isso como se cada bit fosse invertido de valor. Exemplo:
    • ~14 # decimal -15
    Isso ocorre porque algumas notações binárias consideram o primeiro bit de cada número como o sinal do mesmo. Assim, se ele for um "1", ele é um número negativo, do contrário, ele é positivo.

fonte: http://wiki.python.org/moin/BitwiseOperators


CarlosMoraisDosSantos