2010-11-23 35 views
5

Me pregunto acerca de la barra invertida de Java. ¿Cómo ve la computadora o el compilador esta barra invertida y cómo se almacena en la computadora?¿Qué significa realmente la barra invertida ""?

He leído que la barra invertida elimina el significado especial del siguiente carácter. Pero, ¿cómo trata una computadora esta y en qué condiciones la trata de otras maneras?

Por ejemplo, el carácter nulo \0 en la programación C, es el final de la cadena, pero ¿es un solo carácter o dos caracteres, es decir, barra invertida + cero?

El objetivo de la barra invertida es indicar para humanos o indicar para 0-1 computadora?

Respuesta

8

La barra diagonal inversa \ es un carácter, al igual que la letra A, la coma , y el número 4. En algunos lenguajes de programación, notablemente C y sus descendientes (y tal vez antepasados), se usa dentro de una cadena o literal de caracteres para escapar de otros caracteres. Por ejemplo, '\a' representa el carácter de campana y producirá un pitido desde la computadora si lo imprime (printf("%c", '\a')).

Como un carácter de escape de lenguaje C, es en gran parte una construcción humana permitida por el compilador para que los humanos puedan expresar, por ejemplo, el carácter de campana. El código compilado simplemente almacena el carácter, un byte con el valor 7. Solo para ser absolutamente claro, lo hace no store a \ seguido de a.

En otros contextos, la barra invertida significa algo para el programa en tiempo de ejecución. La instancia más conocida de esto es la sintaxis de expresiones regulares, en la que una barra invertida escapa de otros caracteres con el fin de darles un significado especial o quitarles un significado especial que puedan tener. Por ejemplo, grep '\<foo\>' file.txt localizará líneas con la palabra foo en file.txt. En este caso, las barras diagonales realmente están allí en tiempo de ejecución, y el programa las interpreta como escapes para el < y > que las siguen. En este caso, \< y \> no representan caracteres en absoluto; denotan una coincidencia de ancho cero contra el comienzo y el final de una palabra, respectivamente.

+0

hola, Marcelo, gracias por su respuesta detallada. Solo una cosa, cuando hacemos un programa c como el procesamiento de cadenas, nosotros, como seres humanos, usamos "\ 0" en el programa para expresar nuestra operación con el final de la cadena. entonces, ¿qué hace el compilador? ¿Está "\" almacenado o el siguiente carácter "0" (o "a" en su ejemplo) almacenado? luego, cuando el programa se ejecuta, ¿cómo responde el código o continúa con este valor almacenado? – pepero

+0

@ pepero: para el caso de terminar una cadena con \ 0, el valor que se almacena es un byte con el valor de cero (sin bits establecidos). Esta pasa a ser otra conversión C utilizada para permitir encontrar el final de las cadenas. – BCS

+0

@ pepero: supongo que usted hizo su comentario antes de guardar mi respuesta editada, que cubre este punto explícitamente en el segundo párrafo. Acabo de ajustarlo ligeramente para eliminar cualquier posible ambigüedad. –

7

Realmente depende enteramente en el contexto. Las barras invertidas pueden significar muchas cosas diferentes, dependiendo de dónde las vea usar. Por ejemplo, en Windows, las barras diagonales inversas se encuentran comúnmente como separadores de ruta.

En lenguajes de programación basados ​​en C (así como en otros lenguajes de scripting), son escape characters. Indican que el personaje a su derecha debe interpretarse de forma diferente a como lo haría normalmente. En su ejemplo, \0 es un terminador nulo, y la barra invertida indica que el compilador (y el humano) deben interpretar el 0 como el carácter nulo en lugar de como el número cero. Se consideraría como un solo carácter porque la barra diagonal inversa se cuelga una vez que se atiende su función; no tiene ningún significado en esa secuencia más allá de su uso como carácter de escape.

+0

Otra fuente para escapes: http://msdn.microsoft.com/en-us/library/h21280bw(VS.80).aspx Es interesante observar que no incluye explícitamente \ 0 – BCS

+0

@BCS: estoy seguro de que se trata de otra anomalía no tan interesante en la documentación de MSDN. Se menciona explícitamente [aquí] (http://msdn.microsoft.com/en-us/library/6aw8xdf2.aspx). –

+0

Es interesante porque * implícitamente * se menciona como parte de literales octales. – BCS

0

Una barra invertida solo significa algo especial si la situación en que se usa lo considera así. Por ejemplo, muchos lenguajes de programación los usan como escape characters en cadenas. Esto generalmente cambia el significado del siguiente personaje.

Cuestiones relacionadas