二级C语言考试辅导教程第八章:枚举,位运算[2]
上述所有操作都是以字节为最基本的位。然而,在许多系统程序中,往往需要在比特级别上进行操作或处理。C语言提供了位运算的功能,这使得C语言也可以像汇编语言一样用来编写系统程序。
一、按位运算符C语言提供了六种按位运算符:
&按位AND
|按位OR
~ negation
>右移
1。按位AND运算按位AND运算的作用是参与运算中两个数的二进制相位。只有当两个相应的二进制位都为1时,结果位才为1,否则为0。运算中涉及的数以补数的形式出现。
例如:9&5可以这样写:00001001 (9的二进制补码)& 0000101 (5的二进制补码)000001 (1的二进制补码),所以9&5=1。资料来源:www.examda.com
按位AND运算通常用于清除某些位或保留某些位。例如,将A的高八位清零,保留低八位,可以用于&255运算(255的二进制数是000000011111111)。
main(){
int a=9,b=5,c;
c = a & b;
printf(" a = % d \ nb = % d \ NC = % d \ n ",a,b,c);
}
2.按位或运算按位或运算符“|”是一个双目运算符。它的功能是运算中涉及的两个数的二进制相或。只要相应的二进制位之一为1,结果位就是1。运算中涉及的两个数都是补数。
比如9|5可以这样写:00001001 | 0000101
0001101(十进制是13),所以9 | 5 = 13
main(){
int a = 9,9
c = a | b;
printf(" a = % d \ nb = % d \ NC = % d \ n ",a,b,c);
}
3.按位异或运算按位异或运算符“”是一种双目运算符。它的作用是参与运算的两个数对应的二进制或不同,当对应的二进制不同时,结果为1。参与操作数仍以补码形式出现,例如9 ^ 5可写成:00001001 0000101 00001100(十进制为12)
main(){
int a = 9;
a=a^15;
printf("a=%d\n ",a);
}
4.否定算子~是右组合的单目算子。它的功能是对运算中涉及的数字的每个二进制位求反。比如~ 9的运算是~(0000000000001001),结果是:1111111111110110。
5.左移操作左移运算符“>”右边的数字指定要移动的位数。
例如,设a=15,a>>2表示00001111右移至0000011(十进制3)。应当注意,对于有符号的数,符号位将右移。当它为正时,该位用0填充,而当它为负时,符号位为1。该位是用0还是1填充取决于编译系统的规则。Turbo C和许多系统被指定为补充1。
main(){
unsigned a,b;
printf("输入一个数字:");
scanf("%d ",& a);
b = a > > 5;
b = b & 15;
printf("a=%d\tb=%d\n ",a,b);
}
请看另一个例子!
main(){
char a='a ',b = ' b
int p,c,d;
p = a;
p =(p > 8;
printf(" a = % d \ nb = % d \ NC = % d \ nd = % d \ n ",a,b,c,d);
}
0条评论