Expressar números binários em C ++
variáveis C ++ são armazenadas internamente como os chamados números binários. Os números binários são armazenados como uma sequência de 1 e 0 como valores conhecidos BITS.
Na maioria das vezes, você realmente não precisa lidar com os bits em particular que você usa para representar números. Às vezes, porém, é prático e conveniente para mexer com os números no nível de bit - para C ++ fornece um conjunto de operadores para o efeito.O assim chamado bit a bit operadores lógicos operam em seus argumentos no nível de bit. Para entender como eles funcionam, primeiro examinar como os computadores armazenar variáveis.
O sistema de numeração decimal
Os números que você esteve familiarizado com a partir do momento em que puder primeiro contar nos dedos são conhecidos como números decimais porque eles são baseados no número 10. Em geral, o programador expressa variáveis C ++ como números decimais. Assim, você pode especificar o valor de var como (por exemplo) 123, mas considerar as implicações.
Um número tão elevado como 123 refere-se a 1 * 100 * 10 + 2 + 3 * 1. Todos esses números de base - 100, 10 e 1 - são potências de 10.
123 = 1 * 2 * 100 + 10 + 3 * 1
Expressa de uma forma ligeiramente diferente (mas equivalente), 123 se parece com isso:
123 = 1 * 102 + 2 * 101 + 3 * 100
Lembre-se disso qualquer número à potência zero é 1.
Outros sistemas numéricos
Bem, ok, usando 10 como a base (ou base) Do nosso sistema de contagem provavelmente decorre de os 10 dedos humanos, as ferramentas de contagem originais. Uma base alternativa para um sistema de contagem poderia facilmente ter sido 20.
Se o nosso esquema de numeração tinha sido inventado por cães, ela poderia muito bem ser baseado em 8 (um dígito de cada pata está fora de vista sobre a parte de trás da perna). Matematicamente, tal octal sistema teria funcionado tão bem:
12310 = 1 * 82 + 7 * 81 + 3 * 80 = 1738
O pequeno 10 e 8 aqui 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 numérico binário
Os computadores têm essencialmente dois dedos. Computadores prefiro contar com base 2. O número 12310 seria expressa desta forma:
12310 = 0 * 27 + 1 * 26 + 1 * 25 + 1 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 1 * 2012310 = 128 + 0 * 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 * 2 + 1 + 1 * 1 = 011110112
Convenção computador expressa números binários utilizando 4, 8, 16, 32, ou mesmo de 64 dígitos binários, mesmo se os dígitos são 0. Isto também é devido à maneira como os computadores são construídas internamente.
Porque o termo dígito refere-se a um múltiplo de 10, uma Digito binário é chamado um pouco (Uma abreviação de Digito binário). UMA byte é constituída por 8 bits. (Chamar um dígito binário um byte-lo não parece ser uma boa ideia.) Memória geralmente é medido em bytes (como rolos são medidos em unidades de dúzia de padeiro).
Com uma pequena base de tal, você tem que usar um grande número de bits para expressar números. Os seres humanos não quer o incômodo de usar uma expressão como 011110112 para expressar um valor tão mundano quanto 12310. Os programadores preferem expressar números usando um mesmo número de bits.
O sistema octal - que é baseado em 3 bits - foi o sistema binário padrão nos primeiros dias de C. Vemos um vestígio de esta ainda hoje - uma constante que começa com um 0 é assumido como octal em C ++. Assim, a linha de:
cout lt; lt; "0173 =" lt; lt; 0173 lt; lt; endl-
produz o seguinte resultado:
0173 = 123
No entanto, octal foi quase completamente substituído pelo hexadecimal sistema, que é baseado em dígitos de 4 bits.
Hexadecimal utiliza os mesmos algarismos para os números de 0 a 9. Para os algarismos, compreendido entre 9 e 16, hexadecimal usa os primeiros seis letras do alfabeto: A para 10, para 11 B, e assim por diante. Assim, 12310 torna-se 7B16, como isso:
123 = 7 * 161 + B (isto é, 11) * 160 = 7B16
Programadores preferem expressar números hexadecimais em múltiplos de 4 dígitos hexadecimais mesmo quando o primeiro dígito em cada caso é 0.
Finalmente, quem quer expressar um número hexadecimal, como 7B16 usando um subscrito? Terminais nem sequer apoio subscritos. Mesmo em um processador de texto, é um arrastar para alterar as fontes de e para o modo subscrito apenas para digitar dois dígitos ruins.
Portanto, os programadores (há tolos, eles) usam a convenção de começar um número hexadecimal com um 0x. Assim, 7B torna-se 0x7B. Usando esta convenção, o número hexadecimal 0x7B é igual a 123, enquanto decimal 0x123 hexadecimal é igual a 291 decimal. O trecho de código
cout lt; lt; "" = 0x7B lt; lt; 0x7B lt; lt; endl-cout lt; lt; "0x123 =" lt; lt; 0x123 lt; lt; endl-
produz o seguinte resultado:
0x7B = 1230x123 = 291
Você pode usar todos os operadores matemáticos em números hexadecimais, da mesma forma que você aplicá-los em números decimais.
Se você realmente quiser, você pode escrever números binários em C ++ '14 usando o prefixo '0b'. Assim, torna-se 123 0b01111011.