C言語ビット演算
参考資料:http://baike.baidu.com/view/379209.htm
(bit) 。C , C 。
、 C :
&
|
^
~
<<
>>
1. "&" 。 。 1 , 1 , 0。 。
:9&5 : 00001001 (9 )&00000101 (5 ) 00000001 (1 ) 9&5=1。
0 。 a 0 , , a&255 ( 255 0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d
b=%d
c=%d
",a,b,c);
}
2. “|” 。 。 1 , 1。 。
:9|5 : 00001001|00000101
00001101 ( 13) 9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d
b=%d
c=%d
",a,b,c);
}
3. “^” 。 , , 1。 , 9^5 : 00001001^00000101 00001100 ( 12)
main(){
int a=9;
a=a^15;
printf("a=%d
",a);
}
4. ~ , 。 。 ~9 : ~(0000000000001001) :1111111111110110
5. “<<” 。 “<< ” , “<<” ,
, 0。 : a<<4 a 4 。 a=00000011( 3), 4 00110000( 48)。6. “>>” 。 “>> ” ,“>>” 。
: a=15,a>>2 000001111 00000011( 3)。 , , , 。 , 0, , 1, 0 1 。Turbo C 1。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d
",a,b);
}
!
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d
b=%d
c=%d
d=%d
",a,b,c,d);
}