资源描述:
《c语言课件--位运算》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言程序设计信息工程学院施莹August21第12章位运算C语言是为描述系统而设计的,其功能应当具有汇编的功能故C语言具有高级语言的的功能,也肯定低级语言的功能。具有低级语言的功能主要表现在对位的操作上。12.1位运算符和位运算运算符含义运算符含义&按位与~取反
2、按位或<<左移^按位异或>>右移说明:(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。(2)运算量只能是整型或字符型的数据,不能为实型数据。例4&54=00000100(&)5=00000101“按位与”运算符(&)与运算的规则:0&0
3、=00&1=01&0=01&1=100000100按位与运算的作用:清零要求符合的条件:原来的数中为1的位,新数中相应位为0取出指定位只要在指定位处取1保留数中的某几位只要在对应的保留数位处取1例:a=0010110010101100(&)b=0000000011111111c=0000000010101100例:00101011(&)1001010000000000例:01010100(&)0011101100010000按位或运算“
4、”或运算规则:0
5、0=00
6、1=11
7、0=11
8、1=1按位或的作用:将指定位置“1”例
9、:4
10、500000100(
11、)0000010100000101例:a=0010110010101100(
12、)b=0000000011111111c=0010110011111111异或运算符“^“异或运算的规则:0^0=00^1=11^0=11^1=0例4^54=00000100(^)5=0000010100000001按位异或运算的作用:使特定位翻转0^1=11^1=0例编程实现求无符号数a的相反数。unsignedinta;a=a^0xffffa=iint()取出指定位0^0=01^0=1例:取出整型变量a的低8位i
13、nta;a=a^0x0000;例:假设有a=01111010,使其低4位翻转。01111010(^)0000111101110101交换两个值,不用临时变量程序举例例将整型数a、b相互交换,不使用临时变量#includemain(){intx,y;printf("Enterintegersxandy:");scanf("%d,%d",&x,&y);x=x^y;y=y^x;x=x^y;}x=011(^)y=100x=111(^)y=100y=011(^)x=111x=100取反运算符“~“异或运算的规则
14、:~0=1~1=0例~55=00000101(~)11111010右移运算符“>>“右移运算的规则:右边的舍弃对于无符号数,左边补“0”对于有符号数,左边补最高位例unsinged5>>20000010100000001右移相当于/2左移运算符“<<“左移运算的规则:左边的舍弃,右边补“0”例5<<20000010100010100左移一位相当于*2,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。位运算赋值运算符位运算符与赋值运算符可以组成复合赋值运算符如:&=,
15、=,>>=,<<=,^=例如:a&=ba=a
16、&ba<<=2a=a<<2§12.2位运算举例例1:取一个整数a从右端开始的4~7位。158743015430①先使a右移4位②设置一个低4位全位1,其余全为0的数。~(~0<<4)③将上面两者进行&运算(a>>4)&(~(~0<<4))a>>4程序实现:main(){unsigneda,b,c,d;scanf(“%o”,&a);b=a>>4;c=~(~0<<4);d=b&c;printf(“%o,%d%o,%d”,a,a,d,d);}例2:循环移位。要求将a进行右循环移位。见图n位n位右移a:c:①将a的右端n位
17、先放到b中的高位n位中。b=a<<(16-n)②将a右移n位,其左面高位n位补0。c=a>>n③将c与b进行按位或运算。c=c
18、b程序实现:main(){unsigneda,b,c;intn;scanf(“a=%o,n=%d”,&a,&n);b=a<<(16-n);c=a>>n;c=c
19、b;printf(“%o%o”,a,c);}今天作业题1、变量a、b均被声明为短整型(shortint)类型,分别写出执行下列语句后a,b的值。(1)a=4;b=5;a&b;(2)a=-4;b=a
20、6;(3)a=-15;b=~a>>2;