位と、位によって、あるいは、位によって、反対を取ります。
9947 ワード
転載は出典を明記してください。http://blog.csdn.net/droyon/article/details/9335537
一、位と
演算規則:1&1=1,1&0=0,0&1=0;
用途:ゼロクリア、指の位置付け
演算規則:0|1=1、0 124; 0=0、1|0=1、1|1=1
用途:位置1.
演算規則:0&0=0&1=1、1&0=1、1&1=0
用途:特定ビット反転、2桁交換
演算規則:~0=1、~1=0;
用途:フラグビットを削除します。
五、マスク:
マスク0 x 00 ff
用途:
1、いくつかのビットを取り出します。
例えば、下位8ビットを取り出します。
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の関数で交換された例を参照してください。
一、位と
演算規則: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の関数で交換された例を参照してください。