JavaA2Z

KAB-studio > プログラミング > JavaA2Z > ビットフラグとは

ビットフラグ

日本語 微旗
英語 bit flag
ふりがな びっとふらぐ
フリガナ ビットフラグ

解説

1ビット単位のフラグ
整数値の各ビットフラグに見立てたもの。
通常はint変数を使用し、その32ビットの1ビットずつに意味を持たせる。例えば右端のビットは「1であれば赤にする」、右端から2番目のビットは「1であれば青にする」等。
それぞれのビットは独立しており、同時にビットを1にすることができる。前述の例で両ビットとも1にすれば「赤にし、青にもする(紫にする?)」というように、2つのフラグを組み合わせた値となっている。
 
ビットフラグの操作には&演算子|演算子^演算子を使用する。これらの演算子ビット単位での論理演算うことができる。
ビットフラグそのものは、16進数を元に計算して作る。基本的に1、2、4、8が右端からの各ビットのみを立てる値であり、これらによってビットフラグを作る。そのためにも、16進数から2進数をイメージできるのが望ましい。
 
ただし、ビットフラグは整数値を使用し、その各ビットフラグと「みなす」ものであり、ある意味、整数値のイレギュラーな使用方法である。
もしこの整数値を誤って、本当に整数値として使用してしまえば、それだけで値が変わってしまう。
「タイプセーフenum」といった安全なフラグもあるため、使用できるのであればそちらの方がよいだろう。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    /** 右から1ビット目のビットフラグ。 */
    private static final int RED = 0x1;
    /** 右から2ビット目のビットフラグ。 */
    private static final int BLUE = 0x2;
    
    public static void main( String[] args )
    {
        // ビットフラグをそのまま出力します。
        System.out.println( getIntBit( RED ) );
        System.out.println( getIntBit( BLUE ) );
        // 00000000000000000000000000000001
        // 00000000000000000000000000000010

        // ビットフラグひとつだけセットするなら
        // 普通に代入すればいいです。
        int flag = RED;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000001

        // ビットフラグを加える場合には|演算子を使用します。
        flag = flag | BLUE;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000011

        // 特定のフラグが立っているかどうか調べるときには
        // &演算子を使用します。
        System.out.println( ( flag & BLUE ) != 0 );
        // true

        // 特定のビットを反転する場合には
        // ^演算子を使用します。
        flag = flag ^ BLUE;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000001
        flag = flag ^ BLUE;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000011

        // この^演算子を使用すると、特定のフラグを
        // 0にできます。

        // ビットフラグは、結局はただの整数値です。
        flag = 100;
        // なんてしたらもう終わりです。
        // そのため、できればタイプセーフenum等を
        // 使用しましょう。
    }

    /**
    *   int型変数をビット形式で返します。
    */
    private static String getIntBit( int i )
    {
        // int型変数をビット形式で文字列化します。
        String source = Integer.toBinaryString( i );
        // 左0埋めします。
        StringBuffer strbuf = new StringBuffer();
        forint iF1 = source.length(); iF1 < 32; ++iF1 )
        {
            strbuf.append( "0" );
        }
        strbuf.append( source );

        return strbuf.toString();
    }
}
// Sample.java
public class Sample
{
    /** 右から1ビット目のビットフラグ。 */
    private static final int RED = 0x1;
    /** 右から2ビット目のビットフラグ。 */
    private static final int BLUE = 0x2;
    
    public static void main( String[] args )
    {
        // ビットフラグをそのまま出力します。
        System.out.println( getIntBit( RED ) );
        System.out.println( getIntBit( BLUE ) );
        // 00000000000000000000000000000001
        // 00000000000000000000000000000010

        // ビットフラグひとつだけセットするなら
        // 普通に代入すればいいです。
        int flag = RED;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000001

        // ビットフラグを加える場合には|演算子を使用します。
        flag = flag | BLUE;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000011

        // 特定のフラグが立っているかどうか調べるときには
        // &演算子を使用します。
        System.out.println( ( flag & BLUE ) != 0 );
        // true

        // 特定のビットを反転する場合には
        // ^演算子を使用します。
        flag = flag ^ BLUE;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000001
        flag = flag ^ BLUE;
        System.out.println( getIntBit( flag ) );
        // 00000000000000000000000000000011

        // この^演算子を使用すると、特定のフラグを
        // 0にできます。

        // ビットフラグは、結局はただの整数値です。
        flag = 100;
        // なんてしたらもう終わりです。
        // そのため、できればタイプセーフenum等を
        // 使用しましょう。
    }

    /**
    *   int型変数をビット形式で返します。
    */
    private static String getIntBit( int i )
    {
        // int型変数をビット形式で文字列化します。
        String source = Integer.toBinaryString( i );
        // 左0埋めします。
        StringBuffer strbuf = new StringBuffer();
        for( int iF1 = source.length(); iF1 < 32; ++iF1 )
        {
            strbuf.append( "0" );
        }
        strbuf.append( source );

        return strbuf.toString();
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/01/20
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。