私はこの表現を理解しようとしています:
((ch = stream.getChar()) > ' ')
ここでgetChar()
、文字を取得します。この大なり比較演算子は、文字が空のスペースより大きいかどうかをどのようにチェックしますか?
これは可能ですか?
私はこの表現を理解しようとしています:
((ch = stream.getChar()) > ' ')
ここでgetChar()
、文字を取得します。この大なり比較演算子は、文字が空のスペースより大きいかどうかをどのようにチェックしますか?
これは可能ですか?
空欄には文字コードが入ります。見た目はさほどではありませんが、それでも価値はあります。ストリームから取得したキャラクターも同様です。これらの値の文字コードを比較すると、出力が生成されます。
言語仕様(アルゴリズム自体はここで説明されています)をざっと見てみましょう(アルゴリズムは定義されています<
が、>
演算子は結果の値を単純に反転することに注意してください)。
演算子が行うことは、数値を優先して、両方のオペランドをプリミティブ型に変換しようとすることです。
2. a. Let py be the result of calling ToPrimitive(y, hint Number).
2. b. Let px be the result of calling ToPrimitive(x, hint Number).
私たちの場合、x === stream.getChar()
そしてy === ' '
。両方のオペランドはすでにプリミティブ文字列であるため、元の値(px = x, py = y
)になり、次の手順に進みます。
4. Else, both px and py are Strings
これで、オペランドのいずれかが他のオペランドのプレフィックスであるかどうかを確認します。次に例を示します。
'abc' > 'abcd' // false
'foo' > 'foobar' // false
getChar()
スペースはそれ自体のプレフィックスであるため、結果がスペースになる場合は、これが関係します。
' ' > ' ' // false
x
次に、文字列の最初の文字を見つけ、y
文字列の同じ位置にいるが、文字が異なる文字を見つけます。
px内の位置kの文字がpy内の位置kの文字と異なるように、kを最小の非負の整数とします。(どちらの文字列も他方の接頭辞ではないため、そのようなakが存在する必要があります。)
(例えば、'efg'
そして'efh'
、私たちは欲しいg
とh
)
見つかった文字は、整数値に変換されます。
Let m be the integer that is the code unit value for the character at position k within px.
Let n be the integer that is the code unit value for the character at position k within py.
そして最後に、比較が行われます。
If m < n, return true. Otherwise, return false.
そして、それはそれが空間と比較される方法です。
tl; dr両方の引数をコード単位の整数表現に変換し、それを比較します。
Javascript では、文字列はアルファベット順に比較されます。次の式は true です。
'abacus' <= 'calculator'
'abacus' < 'abate'
ほとんどの (すべてではないにしても) プログラミング言語では、文字は内部的に数値で表されます。等値/大なり/小なりチェックを行う場合、実際にチェックしているのは基礎となる数値です。
したがって、JSで:
alert('c' > 'b'); // alerts true
alert('a' > 'b'); // alerts false
空白文字にも数値表現があるため、チェックは有効です。
[string] > [string]
文字を代表値で比較します ( ASCII テーブルを参照)
文字は、コンピューターのメモリに数値 (通常は 1 バイトまたは 2 バイト) として格納されます。
各キャラクターには固有の識別番号があります。
文字がスペースよりも大きいかどうかを確認することで、実際にテーブル内の位置を比較できます。
詳細については、 http://en.wikipedia.org/wiki/ASCIIを参照してください。
このリンクをチェックしてください。JS で比較がどのように機能するかを説明します: http://javascript.about.com/od/decisionmaking/a/des02.htm 基本的に、各文字の ASCII 値を ASCIIこれも文字であるため、対応する ASCII 値があります。