バイナリコレクション

1789 ワード


public class TestBit {

	/**
	 * @param args
	 *  : 32 , +1
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 30;
		System.out.println(Integer.toBinaryString(n));// 11110
		System.out.println(Integer.toBinaryString(-n));// 11111111111111111111111111100010
		int s = n & -n;
		System.out.println(Integer.toBinaryString(s));// 10
		n = n - (n & -n);
		System.out.println(s);// 2
	}

}


参照
本文中の2'kは2のk次方を表す
1を2で割ったk乗は、ビット演算を使用できます.
n/2'k == n>>k
2対2のk乗の余剰数はビット演算を用いることができる:
n%2'k == n & ((1<例えば100%32
100のバイナリは1100100です
((1<<5)−1)は31が001111である
二つの数が合わさると100になるので、
100%32 = 4
3整数nに対して、下位からk番目(0<=k<=31)を1にする動作は、
n = n | (1<4整数nに対して、下位からk番目(0<=k<=31)を0にする動作は、
n = n & ~(1<5整数nについて、下位からk番目のビット(0<=k<=31)が1であるかどうかをテストし、1であれば0より大きい数を返し、そうでなければ0を返す
return  n & (1<6整数nについて奇数か偶数かを判断する
n&1が0より大きい場合、nは奇数であり、そうでない場合、nは偶数である
7整数nに対してnが奇数であればnを1減算して偶数とし,nが偶数であればnを1加算して奇数とする
n = n ^ 1
8奇数nに対して、以下の性質がある
(n-1) ^ n ==1
9最大int
01 1111111111 1111111111 1111111111
MAX_INT = ~(1<<31)
10最小のint
10 0000000000 0000000000 0000000000
MIN_INT = (1<<31)
11最下位の1を0にする
例えば、111000----->110000
n = n - (n&-n)
12 2つの整数数が同じかどうかを判断する
#define MASK 0x80000000
flag = (x & MASK) ^ (y & MASK)
flagが0の場合、異なる番号を説明します.そうでない場合、同じ番号です.
13一時変数なしで2つの値を交換
aとbの値を交換するには、次の賦値文を使用します.
    a=a∧b;
    b=b∧a;
    a=a∧b;