001101 (十进制为 13)可见 9|5=13
【例 12.2】
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
12.1.3 按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异
或,当两对应的二进位相异时,结果为 1。参与运算数仍以补码出现,例如 9^5 可写成算式
如下:
00001001
^00000101
00001100 (十进制为 12)
【例 12.3】
main(){
int a=9;
a=a^5;
printf("a=%d\n",a);
}
12.1.4 求反运算
求反运算符~为单目运算符,具有右结合xìng。其功能是对参与运算的数的各二进位按位
求反。
例如~9 的运算为:
~(0000000000001001)结果为:1111111111110110
12.1.5 左移运算
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干
位,由“<<”右边的数指定移动的位数,高位丢弃,低位补 0。
例如:
a<<4
指把 a 的各二进位向左移动 4 位。如 a=00000011(十进制 3),左移 4 位后为 00110000(十进
制 48)。
12.1.6 右移运算
右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干
位,“>>”右边的数指定移动的位数。
例如:
设 a=15,
a>>2
表示把 000001111 右移为 00000011(十进制 3)。
应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补
0,而为负数时,符号位为 1,最高位是补 0 或是补 1 取决于编译系统的规定。Turbo C 和很
多系统规定为补 1。
【例 12.4】
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);
}
请再看一例!
【例 12.5】
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);