- PR -

byte型の使用方法について

1
投稿者投稿内容
NOKKO
会議室デビュー日: 2005/09/06
投稿数: 6
投稿日時: 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/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-09-07 16:32
byte は符号付きの型なので、b に入っているのは 255 ではなく -1 です。
なので、4行目では -1 として long に拡張されます。

引用:

4つの要素を持ったbyte型の配列(先頭要素から 0x00,0x00,0x00,0x01)を受け取った場合
IntかLongの変数にシフト演算を用いて代入して、数値データ(この場合1)を取得したい。


もちろん、可能です。符号拡張を避けるためには、例えば「ib_length |= b & 0xff」のようにします。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-09-07 16:42
引用:

コード5行目の出力結果がffffffffffffffffになってしまう理由がわかりません。


long型整数「-1」の「2の補数」表現が「ffffffffffffffff」だからです。

ところで、
引用:

2 b |= 0xFF;
3
4 ib_length |= b;


では、bがいかなる値でも、2行目で必ず「ff」になってしまいます。
以下でなければならないのでは?
<・・・削除しました。m(_ _;m>

<追記>
符号の処理は、システムに任せっぱなしではいかんかったですか。orz

[ メッセージ編集済み 編集者: Edosson 編集日時 2005-09-07 16:49 ]
NOKKO
会議室デビュー日: 2005/09/06
投稿数: 6
投稿日時: 2005-09-07 16:49
スフレさん、Edossonさん、早速の回答ありがとうございました。
やりたい事が実現でき、モヤモヤが取れてスッキリしました。
また宜しくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)