更多请关注 >>http://java.jr-jr.com

  1. 1. “按位与”运算符(&)
    1. 1.1. 运算规则
    2. 1.2. 用途
  2. 2. 按位或运算符(|)
    1. 2.1. 运算规则
    2. 2.2. 用途
  3. 3. “异或”运算符(^)
    1. 3.1. 运算规则
    2. 3.2. 用途
  4. 4. “取反”运算符(~)
    1. 4.1. 运算规则
    2. 4.2. 用途
  5. 5. 左移运算符(<<)
    1. 5.1. 运算规则
    2. 5.2. 用途
  6. 6. 右移运算符(>>)
    1. 6.1. 运算规则
    2. 6.2. 用途

“按位与”运算符(&)

运算规则

参加运算的两个数据,按二进位进行“与”运算,如果两个相应的二进位都为1,则该位的结果值为1,否则为0,即:
0&0=0,0&1=0,1&0=0,1&1=1.

用途

  • 清零
    运算对象:原来的数中为1的位,新数中相应位为0。
  • 取一个数中某些指定位。
    如想要取一个整数a(占2个字节)的低(高)字节,只需将a与八进制的377(177400)按位与即可。
  • 保留某一个数的某一位。
    与一个数进行&运算,此数在该位取1。
    例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
    按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
    1
    2
    3
    4
    5
    main(){
    int a=9,b=5,c;
    c=a&b;
    printf("a=%d\nb=%d\nc=%d\n",a,b,c);
    }

按位或运算符(|)

运算规则

参加运算的两个数据,按二进位进行“或”运算,如果两个相应的二进位都为0,则该位的结果值为0,否则为1,即:
0|0=0,0|1=1,1|0=1,1|1=1。

用途

对一个数据的某些位定值为1。

3.例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13

1
2
3
4
5
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

“异或”运算符(^)

也称XOR运算符。

运算规则

若参加运算的两个二进位同号,则结果为0(假);异号则为1(真),即:
0^0=0,0^1=1,1^0=1,1^1=0.

用途

  • 使特定位翻转
    假设有01111010,想使其低4位翻转,可以将它与00001111进行^运算。
  • 与0相^,保留原值
  • 交换两个值,不用临时变量
    假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:
    a=a^b; b=b^a; a=a^b;

例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)

1
2
3
4
5
main(){
int a=9;
a=a^15;
printf("a=%d\n",a);
}

“取反”运算符(~)

运算规则

~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,1变0。

用途

使一个整数a的最低位为0,可以用:a=a&~1;
例如~9的运算为: ~(0000000000001001)结果为:1111111111110110

左移运算符(<<)

运算规则

用来将一个数的各二进位全部左移若干位,右补0,高位左移后溢出,舍弃不起作用。

用途

左移一位相当于乘以2
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。

1
2
3
4
5
6
7
8
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d\n",a,b);
}

请再看一例!

1
2
3
4
5
6
7
8
9
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\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}

右移运算符(>>)

运算规则

用来将一个数的各二进位全部右移若干位,移到右端的低位被舍弃,对无符号数,高位补0;
对有符号数,左边移入0(“逻辑右移”)或1(“算术右移”)

用途

右移一位相当于除以2