Índice:
Vídeo: Análise de Algoritmos - Recursividade 2024
As variáveis C ++ são armazenadas internamente como os chamados números binários. Os números binários são armazenados como uma seqüência de valores de 1 e 0 conhecidos como bits. Na maioria das vezes, você realmente não precisa lidar com números no nível de bits; no entanto, há ocasiões em que isso é conveniente. C ++ fornece um conjunto de operadores para esse fim.
Os chamados operadores lógicos bit a bit operam em seus argumentos no nível de bits. Para entender como eles funcionam, examine como os computadores armazenam variáveis.
O sistema de números decimais
Os números que você conhece são conhecidos como números decimais porque eles são baseados no número 10. Em geral, o programador expressa C ++ variáveis como números decimais. Assim, você diria que o valor de var é 123, por exemplo.
Um número como 123 refere-se a 1 * 100 + 2 * 10 + 3 * 1 . Cada um desses números de base - 100, 10 e 1 - é um poder de 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Expresso de forma ligeiramente diferente, mas equivalente:
123 = 1 * 10 2 + 2 * 10 1 + 3 * 10 0
Lembre-se de que qualquer número para a potência zero é 1.
Outros sistemas de números
O uso de um número base de 10 para O sistema de contagem deriva, com toda a probabilidade, do fato de que os humanos possuem 10 dedos, as ferramentas de contagem originais. A alternativa teria sido a base 20.
Se os cães haviam inventado nosso esquema de numeração, pode ter sido baseado no número 8 (um dígito de cada pata está fora da vista na parte traseira da perna). Esse sistema octal teria funcionado igualmente:
123 10 = 1 * 8 2 + 7 * 8 1 + 3 * 8 0 = 173 8
Os 10 e 8 pequenos referem-se ao sistema de numeração, 10 para decimal (base 10) e 8 para octal (base 8). Um sistema de contagem pode usar qualquer base positiva.
O sistema do número binário
Os computadores têm essencialmente dois dedos. (Talvez seja por isso que os computadores são tão estúpidos: sem um polegar oponível, eles não conseguem entender nada. E, novamente, talvez não.) Os computadores preferem contar usando a base 2. O número 123 10 seria expresso como:
123 10 = 0 * 128 + 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1
= 01111011 < 2 É sempre uma convenção para expressar números binários usando dígitos binários 4, 8, 32 ou 64, mesmo que os dígitos iniciais sejam zero. Isso também é devido à forma como os computadores são construídos internamente.
Como o termo
dígito refere-se a um múltiplo de dez, um dígito binário é chamado de bit . O termo decorre do dígito binário (b-) (-it).Oito bits compõem um byte. Uma palavra geralmente é dois ou quatro bytes. Com uma base tão pequena, é necessário usar um grande número de bits para expressar números. É inconveniente usar uma expressão como 01111011
2 para expressar um valor tão mundano como 123 10 . Os programadores preferem expressar números por unidades de bytes ou oito bits. Um único dígito de quatro bits é essencialmente base 16, porque quatro bits podem expressar até qualquer valor de 0 a 15. Base 16 é conhecido como o sistema de contagem
hexadecimal . Hexadecimal é frequentemente contratado para simplesmente hex. Hexadecimal usa os mesmos dígitos para os números de 0 a 9. Para os dígitos entre 9 e 16, o hexadecimal usa as primeiras seis letras do alfabeto: A para 10, B para 11 e assim por diante. Assim, 123
10 torna-se 7B 16 . 123 = 7 * 16
1 + B (ie, 11) * 16 0 = 7B 16 Como os programadores preferem expressar números em 4, 8, 32 ou 64 bits, eles preferem expressar números hexadecimais em 1, 2, 4 ou 8 dígitos hexadecimais, mesmo quando os dígitos iniciais são 0.
Finalmente, é inconveniente expressar um número hexadecimal como 7B < 16
usando um subíndice, porque os terminais não suportam subíndices. Mesmo em um processador de texto, é inconveniente alterar fontes de e para o modo de subíndice apenas para digitar dois dígitos. Portanto, os programadores usam a convenção de começar um número hexadecimal com um 0x (o motivo dessa convicção estranha remonta aos primeiros dias de C). Assim, 7B torna-se 0x7B. Usando esta convenção, 0x7B é igual a 123 (enquanto 0x123 é igual a 291.) Todos os operadores matemáticos podem ser executados em números hexadecimais da mesma forma que são aplicados em números decimais. A razão pela qual não podemos realizar uma multiplicação como 0xC * 0xE em nossas cabeças tem mais a ver com as tabelas de multiplicação que aprendemos na escola do que com qualquer limitação no sistema de números.