位と、位によって、あるいは、位によって、反対を取ります。

9947 ワード

転載は出典を明記してください。http://blog.csdn.net/droyon/article/details/9335537
一、位と
演算規則:1&1=1,1&0=0,0&1=0;
用途:ゼロクリア、指の位置付け
		int i=7;//0000 0000   0000 0000    0000 0000    0000 0111
		int j=5;//0000 0000   0000 0000    0000 0000    0000 0101
		
		int m=-7;//1000 0000   0000 0000    0000 0000    0000 0111
		int n=-5;//1000 0000   0000 0000    0000 0000    0000 0101
		
//   		
		System.out.println("     ----i(7)&j(5)=?--------------------------");
		System.out.println("//0000 0000   0000 0000    0000 0000    0000 0111
"+ "//&
"+ "//0000 0000 0000 0000 0000 0000 0000 0101
"+ " =
"+ "//0000 0000 0000 0000 0000 0000 0000 0101 = 5" ); System.out.println(" :"+(i&j)); System.out.println(" ----m(-7)&n(-5)?--------------------------"); System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111
"+ "//&
"+ "//1000 0000 0000 0000 0000 0000 0000 0101
"+ "// :
"+ "//1111 1111 1111 1111 1111 1111 1111 1001
"+ "//&
"+ "//1111 1111 1111 1111 1111 1111 1111 1011
"+ " =
"+ "//1111 1111 1111 1111 1111 1111 1111 1001( )
"+ "//1000 0000 0000 0000 0000 0000 0000 0111 = -7( )" ); System.out.println(" :"+(m&n)); System.out.println("*****************************************************************************
");
演算結果:
     ----i(7)&j(5)=?--------------------------
//0000 0000   0000 0000    0000 0000    0000 0111
//&
//0000 0000   0000 0000    0000 0000    0000 0101
 = 
//0000 0000   0000 0000    0000 0000    0000 0101 = 5
       :5
     ----m(-7)&n(-5)?--------------------------
//1000 0000   0000 0000    0000 0000    0000 0111
//&
//1000 0000   0000 0000    0000 0000    0000 0101
//  :
//1111 1111   1111 1111    1111 1111    1111 1001
//&
//1111 1111   1111 1111    1111 1111    1111 1011
 = 
//1111 1111   1111 1111    1111 1111    1111 1001(  )
//1000 0000   0000 0000    0000 0000    0000 0111 = -7(  )
       :-7
*****************************************************************************
二、位または
演算規則:0|1=1、0 124; 0=0、1|0=1、1|1=1
用途:位置1.
//   		
		System.out.println("     ----i(7)|j(5)=?--------------------------");
		System.out.println("//0000 0000   0000 0000    0000 0000    0000 0111
"+ "//|
"+ "//0000 0000 0000 0000 0000 0000 0000 0101
"+ " =
"+ "//0000 0000 0000 0000 0000 0000 0000 0111 = 7" ); System.out.println(" :"+(i|j)); System.out.println(" ----m(-7)|n(-5)?--------------------------"); System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111
"+ "//|
"+ "//1000 0000 0000 0000 0000 0000 0000 0101
"+ "// :
"+ "//1111 1111 1111 1111 1111 1111 1111 1001
"+ "//|
"+ "//1111 1111 1111 1111 1111 1111 1111 1011
"+ " =
"+ "//1111 1111 1111 1111 1111 1111 1111 1011( )
"+ "//1000 0000 0000 0000 0000 0000 0000 0101 = -5( )" ); System.out.println(" :"+(m|n)); System.out.println("*****************************************************************************
");
演算結果:
     ----i(7)|j(5)=?--------------------------
//0000 0000   0000 0000    0000 0000    0000 0111
//|
//0000 0000   0000 0000    0000 0000    0000 0101
 = 
//0000 0000   0000 0000    0000 0000    0000 0111 = 7
       :7
     ----m(-7)|n(-5)?--------------------------
//1000 0000   0000 0000    0000 0000    0000 0111
//|
//1000 0000   0000 0000    0000 0000    0000 0101
//  :
//1111 1111   1111 1111    1111 1111    1111 1001
//|
//1111 1111   1111 1111    1111 1111    1111 1011
 = 
//1111 1111   1111 1111    1111 1111    1111 1011(  )
//1000 0000   0000 0000    0000 0000    0000 0101 = -5(  )
       :-5
*****************************************************************************
三、位によって異なる
演算規則:0&0=0&1=1、1&0=1、1&1=0
用途:特定ビット反転、2桁交換
//    
		System.out.println("      ----i(7)^j(5)=?--------------------------");
		System.out.println("//0000 0000   0000 0000    0000 0000    0000 0111
"+ "//|
"+ "//0000 0000 0000 0000 0000 0000 0000 0101
"+ " =
"+ "//0000 0000 0000 0000 0000 0000 0000 0010 = 2" ); System.out.println(" :"+(i^j)); System.out.println(" ----m(-7)^n(-5)?--------------------------"); System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111
"+ "//^
"+ "//1000 0000 0000 0000 0000 0000 0000 0101
"+ "// :
"+ "//1111 1111 1111 1111 1111 1111 1111 1001
"+ "//^
"+ "//1111 1111 1111 1111 1111 1111 1111 1011
"+ " =
"+ "//0000 0000 0000 0000 0000 0000 0000 0010( )
"+ "//0000 0000 0000 0000 0000 0000 0000 0010 = 2( )" ); System.out.println(" :"+(m^n)); System.out.println(" "); int a = m; int b = n; System.out.println("a,b :a="+a+",b="+b); a=a^b; b=a^b; a=a^b; System.out.println("a,b :a="+a+",b="+b); System.out.println("*****************************************************************************
");
実行結果:
      ----i(7)^j(5)=?--------------------------
//0000 0000   0000 0000    0000 0000    0000 0111
//|
//0000 0000   0000 0000    0000 0000    0000 0101
 = 
//0000 0000   0000 0000    0000 0000    0000 0010 = 2
        :2
      ----m(-7)^n(-5)?--------------------------
//1000 0000   0000 0000    0000 0000    0000 0111
//^
//1000 0000   0000 0000    0000 0000    0000 0101
//  :
//1111 1111   1111 1111    1111 1111    1111 1001
//^
//1111 1111   1111 1111    1111 1111    1111 1011
 = 
//0000 0000   0000 0000    0000 0000    0000 0010(  )
//0000 0000   0000 0000    0000 0000    0000 0010 = 2(  )
        :2
               
a,b    :a=-7,b=-5
a,b    :a=-5,b=-7
*****************************************************************************
四、位によって反対を取る
演算規則:~0=1、~1=0;
用途:フラグビットを削除します。
//    
		System.out.println("      ----~i=?--------------------------");
		System.out.println("//~
"+ "//0000 0000 0000 0000 0000 0000 0000 0111
"+ " =
"+ "//1111 1111 1111 1111 1111 1111 1111 1000( )
"+ "//1000 0000 0000 0000 0000 0000 0000 1000 = -8( )" ); System.out.println(" :"+(~i)); System.out.println(" ----~m?--------------------------"); System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111
"+ "// :
"+ "//1111 1111 1111 1111 1111 1111 1111 1001
"+ "//~
"+ "//1111 1111 1111 1111 1111 1111 1111 1001
"+ " =
"+ "//0000 0000 0000 0000 0000 0000 0000 0110
( )
"+ "//0000 0000 0000 0000 0000 0000 0000 0110 = 6( )" ); System.out.println(" :"+(~m)); System.out.println(" i (-i-1)");
実行結果:
      ----~i=?--------------------------
//~
//0000 0000   0000 0000    0000 0000    0000 0111
 = 
//1111 1111   1111 1111    1111 1111    1111 1000(  )
//1000 0000   0000 0000    0000 0000    0000 1000 = -8(  )
        :-8
      ----~m?--------------------------
//1000 0000   0000 0000    0000 0000    0000 0111
//  :
//1111 1111   1111 1111    1111 1111    1111 1001
//~
//1111 1111   1111 1111    1111 1111    1111 1001
 = 
//0000 0000   0000 0000    0000 0000    0000 0110
(  )
//0000 0000   0000 0000    0000 0000    0000 0110 = 6(  )
        :6
  i     (-i-1)
位置によって反を取って、&124に協力して、状態の増加と除去を行うことができます。http://blog.csdn.net/hailushijie/article/details/8675820
五、マスク:
マスク0 x 00 ff
用途:
1、いくつかのビットを取り出します。
例えば、下位8ビットを取り出します。
int a = 0x1234;
int b = (a& 0x00ff);
2、特定の位置0。
b = a & ~0x00ff;
3、セット1として特定する。
b = a|0x00ff;
六、異種性:
1、任意の数と自分の異種の結果はゼロです。
2、任意の数と0は異種または値を変えず、1の異種または結果は元の操作数と逆を取る。
3、ビット演算a 1^a 2^...a^n=1では、a 1..anのうちの1の個数は奇数となります。
4、x^x^y=y検証:x^x=0,0^y=yのため、上式は成立します。アプリケーションは、上記のビット別または中2の関数で交換された例を参照してください。