在编程语言中,如果我使用“\ n”,则会添加换行符。
有人可以解释“\ n”如何转换为换行符,“/ t”也是如此?
答案 0 :(得分:5)
当编译器正在阅读你的程序时,它看到backslash something
它知道'假装'它看到了别的东西。你可以想象编译器的一部分是这样的:
current_character = getNextCharacter();
if (current_character == BACKSLASH) {
current_character = getNextCharacter();
if (current_character == 'n') {
/*oh, they want a newline */
} else if (current_character == 't') {
/* it's a tab they want */
} else /* ... and so on and so forth */
}
答案 1 :(得分:2)
假设我们讨论语言中的字符串,例如"Hello,\tWorld\n"
,那么编译器的工作就是检测反斜杠,然后将该机器上换行和制表符的相应字符序列插入到生成的可执行文件中的字符串。
在编译器中处理这个问题的代码相当复杂,因为在解析代码时需要记住大量的其他事项,但是如果我们简化一点:
if (inQuote) // So inside ' or "
{
if (currentChar == '\')
{
switch(nextChar)
{
case 'n':
InsertNewLine();
break;
case 't':
InsertTab();
break;
case 'b':
InsertBackSpace();
break;
... several more of these ...
case '\': // '\\' outputs one '\'
InsertBackSlash();
break;
default:
Insert(nextChar); // Ignore any others.
break;
}
}
}
我已经欺骗并为InsertXX
制作了功能,实际上,它可能只是*output++ = 10;
或*output++ = 9;
[或某些已定义的常量,可转换为相同]。
答案 2 :(得分:1)
\字符在许多语言中都是一个'转义字符'。使用该字符,您可以添加特殊的不可打印字符,例如新行或制表符,还可以添加引号。如果你需要使用"要分隔一个字符串,你可以使用\"在其中打印引号。
对于Windows命令提示符,^与打印特殊字符类似。
答案 3 :(得分:0)
编译器知道当它在字符串中看到\ n或\ t时,它必须用特殊的东西替换它:新行或制表符。这只是惯例,反斜杠后跟一个特殊字符(n,l,t,...)意味着特殊的东西。
这个约定的原因是它在文本编辑器中编写程序时不可能在字符串中嵌入真正的换行符和制表符,所以为了帮助程序员他们开发了这个约定。
答案 4 :(得分:0)
换行符是一个'转义序列',所谓的,因为反斜杠符号被认为是转义字符 - 它会导致从字符串的正常解释中逃脱,以便下一个字符被识别为具有特殊字符的字符含义。 例如,
答案 5 :(得分:0)
编译器将字符串("hello"
)存储为字符集合('h', 'e', 'l', 'l', 'o'
)。并且还将这些字符存储为数字 - 然后将其表示为位等。
\n
表示一个字符,尽管我使用了两个字符来编写它。从人类可读字符到存储数字的转换经过一些标准化系统,如ASCII或unicode。在ASCII中,换行符由十进制数10表示(参见http://www.asciitable.com/index/asciifull.gif)。 'A'是65,'B'是66,依此类推。每个小写字母都有自己的编号,从97开始,与大写字母不同。
在打印字符时,换行符仅转换为实际的新行。每当\n
中出现System.out.print()
等特殊字符时,程序会要求终端产生所需的输出,例如跳到下一行。
终端将其进一步委托给操作系统,最后委托显卡实际上使像素移动。每个部分都有自己的责任范围,而其他每个部分都不了解该领域内部的工作方式。只是他们可以相互联系并使事情发生。
请记住,大多数计算机系统由一大群人组成。很少有人知道幕后发生的事情的每个方面。而这一切的美妙之处在于他们不需要!