- - PR -
byte型の使用方法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-07 16:18
お世話になってます。
本日も宜しくお願いします。 1 byte b=0; 2 b |= 0xFF; 3 4 ib_length |= b; 5 System.out.println(Long.toHexString(ib_length)); 6 ib_length = 0xFF; 7 System.out.println(Long.toHexString(ib_length)); 上記のコードを実行しました。 結果は以下のようになりました。 ffffffffffffffff ff コード5行目の出力結果がffffffffffffffffになってしまう理由がわかりません。 どなたか教えて頂けないでしょうか。 また、最終的に実現したい事は、 byte型の配列のデータを受け取った際、それらをつなぎあわせて1つ変数に代入して数値を取得したい。 例えば、 4つの要素を持ったbyte型の配列(先頭要素から 0x00,0x00,0x00,0x01)を受け取った場合 IntかLongの変数にシフト演算を用いて代入して、数値データ(この場合1)を取得したい。 と思っているのですが、 この処理は実現可能なのでしょうか? 宜しくお願いします。 | ||||||||
|
投稿日時: 2005-09-07 16:32
byte は符号付きの型なので、b に入っているのは 255 ではなく -1 です。
なので、4行目では -1 として long に拡張されます。
もちろん、可能です。符号拡張を避けるためには、例えば「ib_length |= b & 0xff」のようにします。 | ||||||||
|
投稿日時: 2005-09-07 16:42
long型整数「-1」の「2の補数」表現が「ffffffffffffffff」だからです。 ところで、
では、bがいかなる値でも、2行目で必ず「ff」になってしまいます。 以下でなければならないのでは? <・・・削除しました。m(_ _;m> <追記> 符号の処理は、システムに任せっぱなしではいかんかったですか。orz [ メッセージ編集済み 編集者: Edosson 編集日時 2005-09-07 16:49 ] | ||||||||
|
投稿日時: 2005-09-07 16:49
スフレさん、Edossonさん、早速の回答ありがとうございました。
やりたい事が実現でき、モヤモヤが取れてスッキリしました。 また宜しくお願いします。 |
1