2012-01-27 35 views
6

Estoy tratando mucho de desarrollar una comprensión mucho más profunda de la programación en general. Entiendo la definición de libro de texto de "binario", pero lo que no entiendo es exactamente cómo se aplica a mi programación diaria.¿Cómo se relacionan los números "binarios" con mi programación diaria?

El concepto de "números binarios" vs ... bueno ... números "regulares", me he perdido por completo a pesar de mis mejores intentos de investigar y comprender el concepto.

Soy una persona que originalmente me enseñé a programar creando juegos de aventuras estúpidos en los primeros DOS Basic y C, y ahora actualmente hago la mayoría (er, todo) de mi trabajo en PHP, JavaScript, Rails y otro "web "idiomas". Encuentro que gran parte de esta lógica se abstrae en estos lenguajes de nivel superior, y finalmente siento que me faltan muchas de las herramientas que necesito para seguir progresando y escribir mejor código.

Si alguien pudiera orientarme en la dirección de un buen y sólido recurso de aprendizaje práctico, o explicarlo aquí, sería enormemente apreciado.

No estoy tanto buscando la 'definición' (he leído la página de la wikipedia algunas veces), pero más información sobre cómo puedo incorporar este conocimiento recién descubierto de qué son exactamente los números binarios en mi programación diaria, si es que lo hace. Principalmente escribo en PHP estos días, por lo que las referencias a ese idioma específicamente serían muy útiles.

Editar: Como se ha señalado .. binaria es una representación de un número, no un sistema completamente diferente .. Así que revisar mi pregunta, ¿cuáles son los beneficios (si los hay) de la utilización de la representación binaria de los números en lugar de solo ... números.

+6

No hay números "binarios" o "regulares", solo hay números. Binario es solo una posible representación de un número. – millimoose

+1

@Inerdial: Sí, eso es cierto, pero en algunos casos un programador puede elegir trabajar con la representación binaria de un número porque cumple sus propósitos. Creo que esto es sobre lo que OP quiere aprender. –

+0

Al incorporar el conocimiento a la programación diaria, me viene a la mente: [PHP: operadores en bits] (http://php.net/manual/en/language.operators.bitwise.php) –

Respuesta

11

Los árboles binarios (una de sus etiquetas), particularmente binary search trees, son prácticos para algunos escenarios de programación cotidiana (por ejemplo, clasificación).

Los números binarios son esenciales para los fundamentos de la informática, pero se usan más raramente en lenguajes de nivel superior.

Los números binarios son útiles para entender los límites, como el mayor número sin firmar de varios anchos (por ejemplo 2^32 - 1 para 32 bits) o los números más grandes y más pequeños para two's complement (el sistema normalmente utilizado). Por ejemplo, ¿por qué el complemento de dos firmado más pequeño es el número de 32 bits -2^31 pero el más grande 2^31 - 1? Incluso más extraño a primera vista, - (- 2^31) (negando el número más pequeño), se rinde. (Sugerencia, pruébelo con números de 2 bits, ya que el análisis es el mismo).

Otro es básico information theory. ¿Cuántos bits necesito para representar 10000 posibilidades (registro 10000, redondeado)? También es aplicable a la criptografía, pero probablemente todavía no entres demasiado.

No espere utilizar el binario todos los días, pero desarrolle una comprensión básica por estas y otras razones.

Si explora pack y operadores bit a bit, puede encontrar otros usos. En particular, muchos programadores no saben cuándo pueden usar XOR (lo que se puede entender al mirar una tabla de verdad que involucra los dos dígitos binarios).

+0

Los números binarios también son relevantes cuando se intenta utilizar los operadores lógicos bit-shift y bitwise. Sin embargo, esos no suelen aparecer mucho en idiomas de alto nivel. – Brilliand

+3

Hmm ... He estado aprendiendo un poco sobre los árboles binarios, pero todavía no entiendo exactamente dónde los "usaré" día a día. Un amigo mío mencionó cómo usa una base de datos como un "árbol binario" que incluye punteros a datos estáticos/almacenados en caché en otro lugar. Creo que mi confusión fue parcialmente planteada tratando de averiguar exactamente qué diablos significa eso;) IE: es un árbol binario un "tipo" de datos o simplemente un "concepto" de datos. ¡Gracias por tu comentario! Creo que para ser más inteligente, primero debo permitirme sentirme completamente estúpido. –

+0

Un árbol binario es lo que se llama un [tipo de datos abstractos] (http://en.wikipedia.org/wiki/Abstract_data_type). Hay implementaciones concretas como [TreeMap] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/TreeMap.html). Se usa todos los días por programas que desean mantener una lista ordenada de objetos y valores asociados. Piense en uno cada vez que tenga que mantener algo ordenado. –

1

bastante más de una experiencia más que una respuesta sólida:

de hecho, que en realidad no necesita binaria, ya que es más o menos abstraído en la programación de hoy en día (dependiendo de lo que se programa). binary tiene más uso en el diseño de sistemas y redes.

algunas cosas que mis colegas en la escuela hacen en sus carreras:

  • conjuntos y operaciones (códigos op)
  • trabajo en red y la transmisión de datos
  • de instrucciones del procesador piratería (especialmente la memoria "manipulación" más. hexagonal, pero aún relacionado)
  • asignación de memoria (en el montaje, utilizamos hexagonal, pero a veces binaria)

necesita saber cómo la máquina representa y entiende estos "números regulares"; por lo tanto, todas las "lecciones de conversión", como las de hexadecimal a binario, binario a octal, etc., las máquinas solo leen binario.

+0

Gracias por su respuesta ... ha llegado a un punto importante. Probablemente no necesite utilizar este concepto en la práctica ya que es abstraído por completo por todos mis idiomas de alto nivel favoritos. Supongo que mi objetivo aquí es no usarlo porque entiendo que no lo necesito ... en lugar de no usarlo porque no tengo ni idea de lo que es. Su mención del código de máquina, relacionado con el código de la máquina ... eso tiene mucho sentido para mí, gracias por su respuesta. –

0

Como miembro de la Web, sin duda comprende la importancia de Unicode. Unicode se representa en formato hexadecimal cuando se visualizan juegos de caracteres no compatibles con su sistema. Hexidecimal también aparece en valores RGB y direcciones de memoria. Hexideciaml es, entre otras cosas, una forma abreviada de escribir largos caracteres binarios.

Finalmente, los números binarios funcionan como la base de la veracidad: 1 es verdadero, mientras que 0 siempre es falso.

Ve a un libro sobre fundamentos digitales y prueba tu lógica booleana. ¡Nunca volverás a mirar if a and not b or c de la misma manera!

3

Hay dos usos de binario (frente regulares) números.

Debido a la palabra regulares, probablemente no:

  • binarios almacenados como bytes compactos, dicen 4 bytes para un entero, 8 B para un doble. Es SQL INT o DOUBLE. Almacenado regularmente como texto, byte por dígito. SQL VARCHAR.

Pero en nuestro caso:

  • Representación en diferentes base de numeración: binario 101 = 1 * 4 + 0 * 2 + 1 * 1 = 5.

Esto se presta para codificaciones complejas de sí/no estados:

Dada 1 | x = 1 y 0 | x = x (o, binario +) y 0 & x = 0 y 1 & x = x (y, * binaria)

$sex_male = 0: 
$sex_female = 1; 
$employee_no = 0*2; 
$employee_yes = 1*2; 
$has_no_email = 0*4; 
$has_email = 1*4; 

$code = $sex_female | $employee_no | $has_email; 

if (($code & $sex_female) != 0) print "female"; 
+2

Esto se denomina [máscara de bits] (http://en.wikipedia.org/wiki/Bitmask), y se debe usar principalmente en situaciones de memoria limitada (es decir, normalmente no en PHP). –

+0

En realidad, este es un buen punto ... Creo que al comprender mejor las situaciones con limitaciones de memoria, comprenderé mejor los conceptos de nivel superior. Poco a poco he estado aprendiendo Objective-C en mi tiempo libre, lo que me ha llevado a profundizar en el uso de la memoria y otros conceptos que hasta ahora he podido ignorar debido a mi dependencia de los lenguajes de nivel superior. –

4

Aquí hay una breve historia para ayudar a su comprensión y voy a llegar a su pregunta al final.

Binario es un poco raro porque estamos tan acostumbrados a usar un sistema de base de 10 números. Esto se debe a que los humanos tienen 10 dedos, cuando se agotaron tuvieron que usar un palo, un dedo del pie u otra cosa para representar 10 dedos. Sin embargo, esto no es cierto para todas las culturas, algunas de las poblaciones de cazadores recolectores (como los aborígenes australianos) usaban un sistema de 5 números básicos (una mano) ya que no era necesario producir grandes cantidades.

De todos modos, la razón por la que la base 2 es importante en la informática es porque un circuito puede tener dos estados, bajo voltaje y alto voltaje; pensar en esto como un interruptor (encendido y apagado). Coloca 8 de estos interruptores juntos y tienes 1 byte (8 bits). La mejor manera de pensar un poco es 1 = encendido y 0 = apagado, que es exactamente cómo se representa en binario. A continuación, puede tener algo como esto 10011100 donde 1's son altos voltios y 0 son bajos voltios. En las primeras computadoras, se usaban conmutadores físicos que el operador podía encender y apagar para crear un programa.

En la actualidad, rara vez necesitará utilizar un número binario en la programación moderna. Las únicas excepciones que se me ocurren es la aritmética a nivel de bit, que son formas muy rápidas y eficientes de resolver ciertos problemas o tal vez algún tipo de piratería informática. Todo lo que puedo sugerir es aprender lo básico, pero no se preocupe por usarlo en la programación diaria.

+0

Gracias Jax, esto es muy útil para mí. Estoy de acuerdo en que probablemente nunca lo use, pero encuentro que el aprendizaje de conceptos de nivel inferior siempre me ayuda mucho con conceptos de nivel superior. –

1

Con Python puede explorar operaciones y manipulaciones bit a bit con la línea de comandos. Personalmente, he usado operaciones de bits para examinar un algoritmo de compresión oscuro utilizado en paquetes de radio.

2

Para mí, uno de los mayores impactos de una representación binaria de los números es la diferencia entre los valores y de punto flotante nuestra "ordinario" (en base 10 o decimal) noción de fracciones, decimales y números reales.

La gran mayoría de las fracciones no se pueden representar exactamente en binario. Algo así como 0.4 parece que no es un número difícil de representar; solo tiene un lugar después del decimal, es lo mismo que dos quintos o 40%, ¿qué es tan difícil? Pero la mayoría de los entornos de programación utilizan el punto flotante binario, y no puede representar este número exactamente! Incluso si la computadora muestra 0.4, el valor real utilizado por la computadora no es exactamente 0.4. Entonces obtienes todo tipo de comportamiento no intuitivo cuando se trata de redondeo y aritmética.

Tenga en cuenta que este "problema" no es exclusivo de binario. Por ejemplo, usando nuestra propia notación decimal de base 10, ¿cómo representamos un tercio? Bueno, no podemos hacerlo exactamente. 0.333 no es exactamente lo mismo que un tercio. 0.333333333333 tampoco es exactamente un tercio. Podemos acercarnos bastante, y cuantos más dígitos nos dejes usar, más cerca podremos estar. Pero nunca, nunca se puede exactamente bien, porque requeriría una cantidad infinita de dígitos. Esto es fundamentalmente lo que sucede cuando el punto flotante binario hace algo que no esperamos: la computadora no tiene un número infinito de dígitos binarios (bits) para representar nuestro número, por lo que no puede obtenerlo exactamente derecho, pero nos da lo más cercano que puede.

1

Interesante pregunta. A pesar de que eres un "tipo humilde de la web", tendría que decir que es genial que tengas curiosidad sobre cómo te afecta el binario. Bueno, para ayudar, sugeriría elegir un idioma de bajo nivel y jugar con él. Algo parecido a la programación de C y/o el montaje. En cuanto al uso de PHP, intente consultar el código fuente de PHP y cómo se implementa. Aquí hay enlaces de calidad en binario/hexadecimal http://maven.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html Buena suerte y feliz aprendizaje :)

+0

Parece interesante. ¿Puedes publicar un documento pdf por favor? – Bytemain

+0

del enlace? Esta fuente es de 1996. No estoy seguro de documento pd. Puede intentar ponerse en contacto con el autor http://cs.smith.edu/fac_dthiebaut.php él todavía enseña informática en esta escuela –

+0

http://freecomputerbooks.com/The-Art-of-Assembly-Language.html – Bytemain

Cuestiones relacionadas