白駿11723位マスク


ビットマスク

  • 整数の1ビットをオンにしてチェックします.(bool[32]配列の使用と同様)
  • 長所

  • メモリ消費量が少ない
  • プログラムより速い
  • インプリメンテーション


    しゅつりょく

    void	show(int *a) {
    	for (int i = 32; i > 0; i--) {
        		cout << ((*a & (1 << (i - 1))) ? 1 : 0 );
           }
    }

    初期化(null)

    void	init(int *a) {
    	*a = 0;
    }

    すべてを含む

    void	full(int *a) {
    	*a = -1;
    }

    i番目のインデックスを挿入

    void	set(int *a, int i) {
    	*a |= (1 << i);
    }

    最初のインデックスを削除

    void	drop(int *a, int i) {
    	*a &= ~(1 << i);
    }

    i番目のインデックスの確認

    bool	check(int *a, int i) {
    	return (*a & (1 << i));
    }

    i 2番目のインデックスを切り替える(1は0、0は1)(xor演算^)

    void	toggle(int *a, int i) {
    	*a ^= (1 << i);
    }

    最後の要素を求めます

    int		getLast(int *a) {
    	return (*a & -*a);
    }

    最後の要素を削除

    void	dropLast(int *a) {
    	*a &= (*a - 1);
    }

    TEST

    
    int main () {
    	int		a;
    	
    	full(&a);
    	cout << "모두 포함\n";
    	show(&a); cout << "\n";
    
    	init(&a);
    	cout << "null초기화\n";
    	show(&a); cout << "\n";
    	
    
    	set(&a, 4);
    	set(&a, 7);
    	cout << "4, 7 추가\n";
    	show(&a); cout << "\n";
    
    	drop(&a, 4);
    	cout << "4 삭제\n";
    	show(&a); cout << "\n";
    	
    	cout << "7 확인 :" << check(&a,7) << "\n";
    
    	toggle(&a, 7);
    	toggle(&a, 3);
    	toggle(&a, 2);
    	cout << "2, 3, 7 togle\n";
    	show(&a); cout << "\n";
    
    	cout << "마지막 원소 구하기 : " << getLast(&a) << "\n";
    	show(&a); cout << "\n";
    	dropLast(&a);
    	cout << "마지막 원소 삭제\n";
    	show(&a); cout << "\n";
    
    }