O que são operadores bit a bit?
Em um programa de computador, operadores bit a bit são operadores para manipular padrões de bits em expressões. Bit a bit AND, OR, exclusivo OR (XOR), NOT, shift direito e shift esquerdo são operações comuns. A maioria das linguagens de programação de computadores inclui todos os seis desses operadores. Eles são freqüentemente usados para definir, limpar ou inverter bits individuais em programas que controlam o hardware do computador. Os operadores bit a bit também são freqüentemente usados em algoritmos de criptografia e compactação de dados.
Os operadores bit a bit comuns são geralmente representados simbolicamente em linguagens de programação como C, C ++ e Java. Eles são usados em expressões como operadores aritméticos, como sinais de mais ou menos. O operador bit a bit AND é representado com o e comercial & , OR com o tubo | e XOR com o cursor ^ . NOT, também conhecido como operador de complemento, é indicado com um til ~ .
O operador de mudança à direita usa um sinal de intercalação duplo apontando para a direita >> . Por outro lado, o deslocamento para a esquerda é indicado por um sinal de intercalação duplo << à esquerda. O Java inclui outra operação de deslocamento à direita, mostrada com um sinal de três pontos triplos >>> .
Operadores bit a bit aplicam uma operação lógica a cada par de bits em seus operandos. NÃO, o deslocamento à direita e o deslocamento à esquerda têm apenas um operando verdadeiro; o segundo valor nas operações de turno é a contagem de bits. Para entender melhor como os operadores bit a bit funcionam, um indivíduo pode visualizar seus operandos como números binários. Por exemplo, o operador complemento vira cada bit de seu único operando para o estado oposto. Um se torna zero e um zero se torna um. O complemento do valor binário de 8 bits 00110101 é 11001010.
O operador AND possui dois operandos. Pouco a pouco, uma operação lógica AND é executada usando um bit correspondente de cada operando. O resultado de cada operação de bit é colocado nessa posição de bit do resultado geral. Por exemplo, o operador AND processará o bit 7 de um operando com o bit 7 do outro operando. O resultado será armazenado no bit 7 do resultado geral.
Em uma operação AND, os dois bits do operando devem ser um para que o resultado seja um, caso contrário, o resultado é zero. Por exemplo, se os valores binários de 8 bits dos operandos forem 00110101 e 11110000, o resultado será 00110000. Um uso comum do operador AND é zerar bits específicos no resultado. Isso é feito colocando zeros nessas posições de bit em um dos operandos.
Em uma operação OR, os dois bits do operando devem ser zeros para que o resultado seja zero; caso contrário, o resultado é um. Um uso comum do operador OR é definir determinados bits do resultado como um. Isso é feito colocando aqueles nessas posições de bit em um dos operandos. Para a operação XOR, o resultado será zero se os dois bits do operando forem zero ou se os dois bits do operando forem um - caso contrário, o resultado será um.
Shift esquerdo e Shift direito movem os bits no operando para a esquerda ou direita pelo número especificado de posições de bits. Um deslocamento lógico para a direita move um zero para o bit mais à esquerda como parte do deslocamento. Um turno aritmético à direita copia o bit mais à esquerda - o bit de sinal - antes do turno para a mesma posição após o turno. O bit original também é deslocado para a direita junto com o restante. Qualquer tipo de deslocamento à esquerda move um zero para o bit mais à direita.
Quando um operando é deslocado para a direita, o bit mais à direita antes do turno é simplesmente jogado fora. Da mesma forma, o bit mais à esquerda antes de um turno esquerdo ser descartado. Ele não envolve a outra extremidade do operando.
As operações de deslocamento bit a bit dependem do idioma e da implementação. Por exemplo, em C e C ++, >> e << executam mudanças lógicas se o operando for um número inteiro não assinado. Se o operando for um número inteiro assinado, é provável que uma mudança aritmética seja feita. Em Java, todos os operandos são considerados assinados e as mudanças aritméticas são sempre realizadas com >> e << . O operador >>> é usado para um deslocamento lógico para a direita, mas ainda é possível fazer um deslocamento aritmético para a direita acidentalmente, sem uma conversão de tipo cuidadosa.
As complicações também podem surgir quando operandos têm comprimentos de bits diferentes ou quando alguns são assinados e outros não são assinados. Operadores bit a bit e constantes numéricas no meio de uma expressão complexa não podem ser avaliados como previsto. Deve-se tomar cuidado para especificar o tamanho e a natureza assinada / não assinada de cada quantidade na expressão. Isso pode ser feito com uma digitação cuidadosa ou atribuições provisórias para tipos de variáveis específicos no código do programa.