Índice:
Vídeo: How We Faked a "Boston Dynamics" Robot 2024
Um número impressionante de operadores de programação C fornece manipulação de dados no nível binário. Os operadores são fáceis de ignorar, mas somente quando seu verdadeiro poder e utilidade não são apreciados.
O ~ e! operadores
Dois operadores binários infreqüentes são o ~ (ou o complemento 1) e o! (ou não). Eles não têm o encanto das operadoras lógicas bit a bit, mas eles têm um lugar.
O operador do complemento 1 flips todos os bits em um valor, transformando um 1 em um 0 e um 0 para um 1. Por exemplo:
~ 01010011 = 10101100
O! (NOT) o operador afeta o valor inteiro - todos os bits. Ele muda qualquer valor diferente de zero para 0 e o valor 0 a 1:
! 01010011 = 00000000! 00000000 = 00000001
Zero e 1 são os únicos dois resultados possíveis ao usar o bitwise! operador.
Tanto o ~ e! os operadores são unary operadores - você simplesmente prefixa um valor para obter os resultados.
Operador | Nome | Tipo | Ação |
---|---|---|---|
e | E | Bitwise | Mascara bits, redefinindo alguns bits para 0 e deixando o resto
sozinho |
| | OR | Bitwise | Define bits, alterando bits específicos de 0 a 1 |
^ | XOR | Bitwise | Muda os bits para 0 quando eles combinam; Caso contrário, para 1 |
~ | 1 complemento | Unary | Inverte todos os bits |
~ | NÃO | Unário | Muda valores diferentes de zero para 0; 0 valores, para 1 |
A função binbin () |
Duas instruções explicam o que está acontecendo na função binbin () para torná-lo converter valores em uma string binária:
bin [x] = n & 0x80? '1': '0'; n << = 1;
A primeira instrução executa uma máscara AND com o valor n. Todos, exceto o bit mais à esquerda no número, são descartados. Se esse bit estiver configurado, o que o torna uma condição TRUE, o caractere 1 é armazenado na matriz; Caso contrário, o caractere 0 é armazenado.
O valor é expresso como 0x80, que é a notação hexadecimal, um tipo de abreviatura para binário. O valor hexadecimal 0x80 é igual a 10000000 binário, que é a máscara AND. Se o valor for 16 bits em vez de 8, é usado 0x8000, o que cria uma máscara binária de 16 bits.
A segunda instrução muda os bits no valor n um entalhe para a esquerda. À medida que o loop gira, trabalhando através do valor n, outro bit no valor é deslocado para a posição mais à esquerda. Esse bit é avaliado e a string binária é criada inserindo um caractere '1' ou '0'.