- - PR -
符号なし
1
投票結果総投票数:7 | |||
---|---|---|---|
JAVA | 7票 | 100.00% | |
|
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-29 22:52
0x80をbyteで受け取り、2進数で10000000に変換してから
算術シフト<<3を行いたいのですが、 2進数の変換時に符号付で判断してしまうため、 算術シフトを行うと欲しい値になりません。 符号を取り除く方法があるのでしょうか? BufferedInputStreamのreadメソッドで取得したbyteデータになります。 | ||||
|
投稿日時: 2007-10-30 00:05
何を投票すべきなのか分からず、 左シフトに符号つきも符号なしも無いと思うのですが、 Javaで右シフトなら、いろんなところで >> 3 が符号つき >>> 3 が符号なし って書いてある様に思います | ||||
|
投稿日時: 2007-10-30 00:49
もう少し整数表現や演算規則を勉強しましょう。
一週間ほど前に同じような質問を見かけました。 byte b = (byte)0x80; System.out.println(b << 3); この出力結果が-1024になってしまうという事ですか? それならば、 byte b = (byte)0x80; System.out.println((b & 0xff) << 3); で望みの結果になると思います。 この理由にシフト演算(左シフトには算術も論理もないし)は関係なく、 整数式の評価時には常にint(やlong)に拡張して計算されるからです。 つまり、符号拡張により0xffffff80 << 3と同じ意味になってしまいます。 |
1