《Java puzzlers》里关于 sign extension 的示例
PHP中文网
PHP中文网 2017-04-18 09:45:37
0
3
473

原文:
If you are converting from a byte value b to a char and you don’t want sign
extension, you must use a bit mask to suppress it. This is a common idiom, so no
comment is necessary:

char c = (char) (b & 0xff);

没有get到 sign extension的含义!以及为什么这么做就没有sign extension

PHP中文网
PHP中文网

认证0级讲师

全員に返信(3)
黄舟

まず、char には 16 ビット バイトと 8 ビット バイトがあります。直接シフトを実行すると、負のバイトは最初の符号ビット 1 に従って直接展開されます。 111111111xxxxxx になる場合は、ビット単位の AND を実行すると、この問題は発生しません。

いいねを押す +0
巴扎黑

それがシンボルビットであることは理解しています

いいねを押す +0
左手右手慢动作

long 型を除く他の型はビット演算を実行するときに、符号拡張を必要としないため、char に変換するビットに一致するバイトの最初のビットが使用されません。 Java には unsigned 型はなく、char の範囲は -2^16-2^16-1 です。char は 2 バイト (たとえば、byte b=-1)、最初のビットは符号ビット char c= として使用されます。 (char)b の場合、c バイナリ ビット (補数) は 1111 1111 1111 1111 と表されます。つまり、最初のビットが符号ビットとして使用されない場合は 2 バイトが -1 を表します (char c=(char)。 )(b&0xff) の場合、c の 2 進ビット (補数) は 0000 0000 1111 1111 として表されます。つまり 255 で、2 文字のバイトは 255 を表します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!