FC2ブログ
HOME   »  スポンサー広告  »  スポンサーサイト   »  Java  »  [Java]byte型数値を符号なし数値として扱う

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Java]byte型数値を符号なし数値として扱う

byte型は8ビットの整数だが、符号付きの為最上位ビットが符号(+/-)を表し、値の範囲は0~255ではなく-128~127となる。

このbyte型の値を符号なしの値(範囲が0~255)として扱いたい場合は、byte型よりもビット数が多いint型等に変換すればよい。
ただし単純に変換すると、符号拡張で負値は負値のままとなってしまうので注意が必要。

例えば、byte型の-1(16進数表示でFF)を単純にint型に変換(int型変数への代入による暗黙の変換)すると、変換後の値も同じく-1のままとなる。
public class Main {
    public static void main(String[] args) {
        byte byteValue = (byte) 0xFF;
        int intValue1 = byteValue;
        System.out.println(String.format("byte型 byteValue (16進数表示):%X", byteValue));
        System.out.println(String.format("byte型 byteValue (10進数表示):%d", byteValue));
        System.out.println(String.format("int型 intValue1 (16進数表示):%X", intValue1));
        System.out.println(String.format("int型 intValue1 (10進数表示):%d", intValue1));
    }
}
上記の実行結果は以下の通り。


byte型 byteValue (16進数表示):FF
byte型 byteValue (10進数表示):-1
int型 intValue1 (16進数表示):FFFFFFFF
int型 intValue1 (10進数表示):-1


int型変数intValue1への代入の際の符号拡張により、上位24ビットが全て符号ビットと同じ値1で埋められ、その結果負値のままとなっている。

この16進数表示でFFとなる値を正値255として扱いたい場合は、int型の値255(32ビットの16進数表示で000000FF)との論理積演算により上位24ビットを全て0にしてやればよい。
public class Main {
    public static void main(String[] args) {
        byte byteValue = (byte) 0xFF;
        int intValue1 = byteValue;
        int intValue2 = byteValue & 0xFF;
        System.out.println(String.format("byte型 byteValue (16進数表示):%X", byteValue));
        System.out.println(String.format("byte型 byteValue (10進数表示):%d", byteValue));
        System.out.println(String.format("int型 intValue1 (16進数表示):%X", intValue1));
        System.out.println(String.format("int型 intValue1 (10進数表示):%d", intValue1));
        System.out.println(String.format("int型 intValue2 (16進数表示):%08X", intValue2));
        System.out.println(String.format("int型 intValue2 (10進数表示):%d", intValue2));
    }
}
上記の実行結果は以下の通り。


byte型 byteValue (16進数表示):FF
byte型 byteValue (10進数表示):-1
int型 intValue1 (16進数表示):FFFFFFFF
int型 intValue1 (10進数表示):-1
int型 intValue2 (16進数表示):000000FF
int型 intValue2 (10進数表示):255


int型の値255との論理積演算を行った結果のintValue2は正値255となっている。


関連記事
Comment
Trackback
Trackback URL
Comment Form
管理者にだけ表示を許可する
プロフィール

まさお

Author:まさお
プログラミングは趣味レベルなので、お手柔らかに。

ブログランキング
ブログランキング参加中。是非クリックお願いします。


にほんブログ村 IT技術ブログ Androidアプリ開発へ

人気ブログランキングへ

ブログランキング



ブログ王

ブログランキング【ブログの惑星】

プログラム人気ブログランキング
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。