2017-02-11 162 views
3

私はchars()方法で、より具体的に、Javadoc for the CharSequenceStringによって実装されたインタフェース、StringBuferおよびその他いくつかを見ていた、とJavadocが「ゼロ拡張」とはどういう意味ですか?

がint、このからchar値をゼロ拡張のストリームを返しますと言います シーケンス。

は今、私はそれがint値、およびそのint that can be cast to charを返すことを知っています。しかし、「ゼロ拡張」とはどういう意味ですか?

+0

おそらくlsBとlsB + 1はchar値で、その他のもの(msB、msB-1)はゼロであるため、整数または整数の形でchar値に等しくなる必要があります。 –

+3

私の推測は最上位16ビットを0に設定することにより、16ビットのcharが32ビットのintになることを保証する。 –

+1

char bbはint 00bbにマップされる。面白いのは、CharStreamなどがないことです。ストリームや関数のすべてのプリミティブなバージョンを提供するのは本当に面倒です。int、long、doubleで停止しました。 – ZhongYu

答えて

6

Intは32ビット値、charは16ビット値です。ゼロ拡張は、intの上位の「未使用」ビットがゼロであることを意味します。

ある意味では、操作は、charの値を16ビット整数として扱い、整数から大きな整数に変換するときには、次のようなライブラリメソッドのユーザーが扱われるため、これは標識がどのように扱われるかを知る必要があります。

知られていないものについては、符号付き整数値は最上位ビットを '符号ビット'として予約します。 1の場合、数値は負の数です。より大きな整数に変換するとき、最上位ビットが新しい値のすべての「余分な」ビットにコピーされる場合、変換は「符号拡張」と言います。これが行われた場合に限り、新しい整数は符号付き整数の符号付き数値と同じ符号付き数値を持ちます。小さい整数値が符号なしの場合、最上位ビットは他のすべてのビットと同じように値を表し、符号拡張なしでは値は同じになります。

Java言語は符号なし整数をデータ型として持たないため、符号拡張を伴わない変換は珍しいものとみなすことができます。

特定の文字の(符号付き)整数値を表す定数があった場合、32ビット整数に変換した後に、変換に符号拡張が含まれていれば、定数はまだ正確になります。どの変換がどのように元の値を扱うかを知ることは重要です。

関連する問題