第12章位运算C语言除了具有高级语言的功能以外,其一个重要特点是具有某些低级语言的功能,这主要表现在C语言有系统调用的功能,例如C程序能调用PC机BIOS中例行程序的int86()函数等
其次,C语言具有直接对C中的int和char类型的数据的某些字节或位进行操作的能力,这与汇编语言的位操作有些相似,例如按位取反等
1位运算符C语言提供的位运算符如表12
1位运算符位运算符含义举例&按位与A&b,a和b中各位按位进行“与”运算|按位或a|b,a和b中各位按位进行“或”运算^按位异或A^b,a和b中各位按位进行“异或”运算~取反~a,对a中各位取反2,a中各位全部右移2位位运算还可以与赋值运算符相结合,成为位运算赋值操作
例如,a&=b,等价于a=a&b
下面分别介绍各运算符
1按位与运算符(&)按位与运算的运算规则是:参加运算的两个运算量,如果两对应位都是1,则该位的结果为1,否则为0
例如,两个二进制数0101和1100按位与运算的结果为0100
1计算8和13两个十进制数按位与运算的结果
main(){unsignedchara,b;a=8;b=13;printf(“%d&%d=%d\n”,a,b,a&b);}程序输出结果为:8&13=8说明:程序中数a即8的二进制形式为1000,数b即13的二进制形式为1101,两数按位相与的结果为1000即十进制数8
2按位或运算(|)按位或运算的运算规则是:两个相应位中只要有一个为1,该位的结果值为1,只有两个相应位都为0,该位的结果值才为0
例如,有两个十六进制数10和34,运算情况如下所示:例12
2main(){unsignedchara,b;printf(“entertwohexnumbers:”);scanf(“%x”,&a);scanf(“%x”,&b);printf(