Expresar números binarios en C ++
Variables de C ++ se almacenan internamente como los llamados números binarios. Los números binarios se almacenan como una secuencia de valores de 1 y 0 conocen como pedacitos.
La mayoría de las veces, usted realmente no necesita para hacer frente a la cual los bits particular, que se utiliza para representar números. A veces, sin embargo, es práctico y cómodo de jugar con los números a nivel de bits - por lo que C ++ proporciona un conjunto de operadores para ese propósito.El llamado bit a bit operadores lógicos operan en sus argumentos a nivel de bits. Para entender cómo funcionan, primero examinar cómo las computadoras variables de la tienda.
El sistema de numeración decimal
Los números que has estado familiarizados con el momento en que pudieras primero contar con los dedos que se conoce como números decimales porque se basan en el número 10. En general, el programador expresa variables de C ++ como números decimales. De esta manera usted puede especificar el valor de var como (por ejemplo) 123, pero tenga en cuenta las consecuencias.
Un número tal como 123 se refiere a 1 * 100 + 2 * 10 + 3 * 1. Todos estos números de base - 100, 10 y 1 - son potencias de 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Expresado de una manera ligeramente diferente (pero equivalente), 123 se parece a esto:
123 = 1 * 102 + 2 * 101 + 3 * 100
Recuerda que alguna número a la potencia cero es 1.
Otros sistemas numéricos
Bueno, está bien, con 10 como la base (o base) De nuestro sistema de conteo probablemente se deriva de esos 10 dedos humanos, las herramientas de conteo originales. Una base alternativa para un sistema de conteo podría fácilmente haber sido 20.
Si nuestro esquema de numeración había sido inventado por los perros, que bien podría estar basado en 8 (un dígito de cada pata está a la vista en la parte posterior de la pierna). Matemáticamente, tal octal sistema habría funcionado igual de bien:
12310 = 1 * 82 + 7 * 81 + 3 * 80 = 1738
El pequeño 10 y 8 aquí se refieren al sistema de numeración, 10 para decimal (base 10) y 8 para octal (base 8). Un sistema de conteo puede utilizar cualquier base positiva.
El sistema numérico binario
Las computadoras tienen esencialmente dos dedos. Computadoras prefieren contar usando base 2. El número 12310 se expresaría así:
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 + 1 * 2 + 1 * 1 = 011110112
Convención Informática expresa números binarios usando 4, 8, 16, 32, o incluso 64 dígitos binarios, incluso si los dígitos son 0. Esto también es debido a la forma computadoras se construyen internamente.
Debido a que el término dígito se refiere a un múltiplo de 10, una dígito binario se denomina una poco (una abreviatura de dígito binario). LA byte se compone de 8 bits. (Llamar a un dígito binario de un byte-it no parece una buena idea.) La memoria se mide en bytes (como rollos se miden en unidades de docena de panadero).
Con una base tan pequeña, hay que utilizar un grande número de bits para expresar números. Los seres humanos no quieren la molestia de usar una expresión como 011110112 para expresar un valor tan mundano como 12310. Los programadores prefieren para expresar números mediante el uso de un número par de bits.
El sistema octal - que se basa en 3 bits - era el sistema binario por defecto en los primeros días de C. Vemos un vestigio de esta aún hoy - una constante que comienza con un 0 se supone que es octal en C ++. Por lo tanto, la línea:
cout lt; lt; "0173 =" lt; lt; 0173 lt; lt; endl-
produce la siguiente salida:
0173 = 123
Sin embargo, octal ha sido casi completamente reemplazado por el hexadecimal sistema, que se basa en dígitos 4 bits.
Hexadecimal utiliza los mismos dígitos para los números del 0 al 9. Para los dígitos entre 9 y 16, hexadecimal utiliza las seis primeras letras del alfabeto: A para 10, B para 11, y así sucesivamente. Por lo tanto, 12310 se convierte en 7B16, Me gusta esto:
123 = 7 * 161 + B (es decir, 11) * 160 = 7B16
Los programadores prefieren expresar números hexadecimales en múltiplos de 4 dígitos hexadecimales incluso cuando el primer dígito en cada caso es 0.
Por último, que quiere expresar un número hexadecimal como 7B16 mediante el uso de un subíndice? Terminales ni siquiera apoyo subíndices. Incluso en un procesador de texto, es un lastre para cambiar las fuentes hacia y desde el modo subíndice sólo para escribir dos dígitos pésimos.
Por lo tanto, los programadores (no hay tontos, ellos) utilizan la convención de comenzar un número hexadecimal con un 0x. Por lo tanto, 7B se convierte en 0x7B. El uso de este convenio, el número hexadecimal 0x7B es igual a 123 decimal, mientras que 0x123 hexadecimal es igual a 291 decimal. El fragmento de código
cout lt; lt; "= 0x7B" lt; lt; 0x7B lt; lt; endl-cout lt; lt; "0x123 =" lt; lt; 0x123 lt; lt; endl-
produce la siguiente salida:
0x7B = 1230x123 = 291
Puede utilizar todos los operadores matemáticos sobre el número hexadecimal de la misma manera en que se aplica a los números decimales.
Si usted realmente desea, puede escribir números binarios en C ++ '14 utilizando el prefijo '0b'. Por lo tanto, se convierte en 123 0b01111011.