バイナリコレクション
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のバイナリは1100100です
((1<<5)−1)は31が001111である
二つの数が合わさると100になるので、
100%32 = 4
3整数nに対して、下位からk番目(0<=k<=31)を1にする動作は、
n = n | (1<
n = n & ~(1<
return n & (1<
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;