+
FAQ: O que os operadores & lt; & lt ;, & gt; & gt ;, & amp ;, |, E ^ fazer? Estes são operadores bit a bit em Python. Preâmbulo: Números de dois complementos Todos esses operadores partilham algo em comum - eles são "operadores bit a bit". Isto é, eles operam em números (normalmente), mas em vez de tratar o número como se fosse um único valor, eles tratá-lo como se fosse uma seqüência de bits, escritos em dois complementos binário. Uma dois do complemento binário é o mesmo que a representação binária clássica para inteiros positve mas é um pouco diferente para números negativos. Os números negativos são representados pelo que executa a operação de complemento de dois em seu valor absoluto. Assim, um breve resumo de dois complementos binário está em ordem: Binário de complemento de dois para inteiros positivos: 0 é escrita como "0" 1 é escrito "1" 2 é escrito como "10" 3 é "11" 4 é "100" 5 é "101" . . 1029 é "10000000101" == 2 ** 10 ** 2 + 2 + 2 0 ** == 1024 + 4 + 1 Binário de complemento de dois para inteiros negativos: Os números negativos são escritos com um líder uma vez de um zero à esquerda. Então, se você estiver usando apenas 8 bits para os números de dois complementos, então você tratar padrões de "00000000" para "01111111", como os números inteiros de 0 a 127, e de reserva "1xxxxxxx" para escrever os números negativos. Um número negativo, - x, é escrito usando o padrão de bits para a (x-1) com todos os bits complementadas (comutada de 1 para 0 ou de 0 a 1). Assim -1 é complementar (1 - 1) = complemento (0) = "11111111", e -10 é o complemento (10 - 1) = complemento (9) = complemento ("00001001") = "11110110". Isto significa que os números negativos percorrer todo o caminho até -128 ("10000000"). Claro que, o Python não utiliza números de 8 bits. Ele costumava usar no entanto muitos bits eram nativos para a sua máquina, mas desde que era não-portáteis, foi recentemente passou a usar um número infinito de bits. Assim, o número -5 é tratada pelos operadores bit a bit como se fosse escrita ". 1111111111111111111011". Ufa! Com este preâmbulo para fora do caminho (e hey, você provavelmente este já sabia), os operadores são fáceis de explicar: Os Operadores: x & lt; & lt; Retorna x y com os bits deslocados para a esquerda em lugares y (e novos bits na mão do lado direito são zeros). Esta é a mesma como a multiplicação por 2 x ** y. X & gt; & gt; Retorna x y com os bits deslocados para a direita por lugares y. Esta é a mesma como // 'ing por 2 x ** y. x & amp; y faz um "bit a bit e". Cada bit da saída é 1 se o bit correspondente de x e de y é 1, caso contrário é 0. x | y faz um "bit a bit ou". Cada bit da saída é 0 se o bit correspondente de x e de y é 0, caso contrário, é uma. x Retorna o complemento de x - o número que você começa alternando cada um para um 0 e 0 para cada uma 1. Este é o mesmo que - x - 1. x ^ y faz um "bit a bit exclusivo ou". Cada bit da saída é o mesmo que o bit correspondente em que X se pouco em y representa 0, e é o complemento do bit em que x se pouco em que y é 1. Apenas lembre-se que cerca de série infinita de bits 1 em um número negativo, e tudo isso deve fazer sentido. Outras aulas Mais um ponto: Python permite a sobrecarga de operador, por isso algumas classes podem ser escritas para permitir que os operadores bit a bit, mas com algum outro significado. Por exemplo, o novo módulo de conjuntos para Python 2.3 usa | e & amp; de união e intersecção.