第11讲位运算
为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言是为研制系统软件而设计的,所以她提供了实现将标志状态从标志字节中分离出来的位运算功能。
所谓位运算是指,按二进制位进行的运算。
位运算及其运算符
──& (1)格式:x&y (2)规则:对应位均为1时才为1,否则为0:3&9=1。
例如,3&9=1: 0011
& 1001
────
0001=1
──| (1)格式:x|y (2)规则:对应位均为0时才为0,否则为1:3|9=11。
例如,3|9=11: 0011
| 1001
────
1011=11
──^
(1)格式:x^y
(2)规则:对应位相同时为0,不同时为1:3^9=10。
──~
(1)格式:~x
(2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1。
──<<
(1)格式:x<< 位数
(2)规则:使操作数的各位左移,低位补0,高位溢出:5<<2=20。
──>>
(1)格式:x>>位数
(2)规则:使操作数的各位右移,移出的低位舍弃;高位:
1)对无符号数和有符号中的正数,补0;
2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。例如,20 >> 2=5。
说明:
(1)x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。
(2)参与运算时,操作数x和y,都必须首先转换成二进制形式,然后再执行相应的按位运算。
例如,5<<2=20:0101 → 10100,20 >> 2=5:10100 → 00101。
说明
除按位取反运算外,其余5个位运算符均可与赋值运算符一起,构成复合赋值运算符: &=、|+、^=、<<=、>>=
──低字节对齐,短数的高字节按最高位补位:
(1)对无符号数和有符号中的正数,补0;
(2)有符号数中的负数,补1。
2007年4月
1、main()
{unsigned char a=2,b=4,c=5,d;
d=a|b; d&=c; printf(“%d\n”,d);}
A) 3 B) 4 C) 5 D) 6
2、int a=1,b=2,c;
c=a^ (b<<2);
A) 6 B) 7 C) 8 D) 9
2007年9月
1、有以下程序
#include<>
main( )
{int a=1,b=2,c=3,x;
x=(a^b)&c; printf("%d\n",x);
}
程序的运行结果是
A)0 B)1 C)2 D)3
2008年4月
1、变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000,若要求将a的高4位取反,低四位不变,所要执行的运算是
A)a^b B)a|b C)a&b D)a<<4
2008年9月
1、有以下程序
#include <>
main( )
{ char a=4;
printf("%d\n", a=a<<1);
}
程序的运行结果是
A)40 B)16 C)8 D)4
2009年3月
1、有以下程序
#include <>
main()
{ int a=5, b=1, t;
t=(a<<2)|b; printf("%d\n", t);
}
程序运行后的输出结果是
A)21 B)11 C)6 D)1
计算机计算机二级C语言程序设计 第11讲 来自淘豆网www.taodocs.com转载请标明出处.