2010-11-23 30 views
5

私はJavaのバックスラッシュについて疑問に思っています。コンピュータまたはコンパイラはこのバックスラッシュをどのように見、どのようにコンピュータに格納されますか?バックスラッシュは何を意味しますか?

バックスラッシュは、次の文字の特殊な意味を削除しています。しかし、コンピュータはこれをどのように扱い、どのような条件で他の方法でそれを扱うのでしょうか?

たとえば、Cプログラミングのヌル文字\0は、文字列の最後ですが、1文字または2文字、つまりバックスラッシュ+ゼロですか?

バックスラッシュの目的は、人間を示すか、0-1コンピュータを示すことですか?

答えて

8

バックスラッシュ\は、文字「A」と同じように、コンマ,と数字「4」のような文字です。いくつかのプログラミング言語、特にCとその子孫(そしておそらくは祖先)では、文字列や文字リテラルの中で他の文字をエスケープするために使用されます。たとえば、'\a'はベル文字を表し、印刷するとコンピュータからビープ音が鳴ります(printf("%c", '\a'))。

C言語のエスケープ文字として、それは人間が例えばベル文字を表現できるように、コンパイラによって許可された主に人間の構造です。コンパイルされたコードは単に文字を格納します。値は7のバイトです。ちょうど明確になるように、には\が格納され、その後にはaが続きます。

他のコンテキストでは、バックスラッシュは実行時にプログラムに何かを意味します。最もよく知られているのは正規表現の構文です。バックスラッシュは他の文字をエスケープして特別な意味を与えたり、特殊な意味を取り除いたりします。たとえば、grep '\<foo\>' file.txtは、file.txtに単語fooの行を配置します。この場合、バックスラッシュは実際に実行時にそこにあり、それに続く<>のエスケープとしてプログラムによって解釈されます。この場合、\<\>は文字をまったく表していません。単語の始めと終わりにそれぞれゼロ幅の一致を表します。

+0

こんにちは、マルセロ、あなたの詳細な答えに感謝します。文字列処理のようなCプログラムを作るとき、人間として、文字列の最後で操作を表現するためにプログラムで "\ 0"を使用します。コンパイラは何をしますか? "\"が格納されているか、または次の文字が "0"(または例では "a")に格納されていますか?プログラムが実行されると、コードはこの格納された値にどのように応答するか、または処理を進めますか? – pepero

+0

@pepero:\ 0で文字列を終了する場合、格納される値は0の値を持つバイトです(ビットは設定されません)。これは、文字列の終わりを見つけるために使用されるさらに別のC変換です。 – BCS

+0

@pepero:私は編集した解答を保存する前にあなたのコメントをしたと思いますが、この点は明示的に2番目の段落に記載されています。私はちょっと曖昧さをなくすためにちょっと微調整しました。 –

7

実際にはが完全にに依存しています。バックスラッシュは、使用する場所に応じて、さまざまな意味を持つことができます。たとえば、Windowsでは、バックスラッシュは通常、パス区切り文字として使用されます。

Cベースのプログラミング言語(他のスクリプト言語も同様)では、escape charactersです。彼らは、自分の権利の性格は、通常のやり方とは異なって解釈されるべきであることを示している。あなたの例では、\0はヌルターミネータであり、バックスラッシュは数字0でなくヌル文字としてコンパイラ(および人間!)によって解釈されるべきであることを示します。バックスラッシュは、その機能が提供された時点で削除されるため、という文字が1つだけ表示されます。エスケープ文字として使用することはできません。

+0

エスケープの別のソース:http://msdn.microsoft.com/en-us/library/h21280bw(VS.80)。aspxそれは明示的に\ 0 – BCS

+0

を含んでいないことに注意することは興味深いです:私はそれがMSDNのドキュメントではあまり面白いものではない異常だと確信しています。明示的にここに記載されています(http://msdn.microsoft.com/en-us/library/6aw8xdf2.aspx)。 –

+0

8進リテラルの一部として*暗に*記述されているので興味深いです。 – BCS

0

バックスラッシュは、その状況が使用されていると見なされる場合、特別なものを意味します。たとえば、多くのプログラミング言語では、文字列にescape charactersという文字が使用されています。これは通常、次の文字の意味を変更します。

関連する問題