第十一章位运算第十一章位运算第十一章位运算第十一章位运算基本内容基本内容基本内容基本内容11.1位运算和位运算符11.2位段(选讲)基本要求基本要求基本要求基本要求掌握位运算的操作方法和概念。掌握位运算符和表达式。掌握位运算的作用,能够利用位运算进行一些简单的编程。本章重点本章重点本章重点本章重点重点:位运算符和表达式。难点:位段。本章作业本章作业本章作业本章作业11.111.1位运算符位运算符11.111.1位运算符位运算符C语言提供了两类、六种位运算符:&按位与|按位或^按位异或~取反<<左移>>右移位逻辑运算符位移运算符11.111.1位运算符位运算符11.111.1位运算符位运算符说明1.只作用于整型或字符型的数据,不能为实型数据。2.作用于整型、字符型数据的每个二进制位,不是数的整体。3.一般逻辑运算是作用数的整体,不是数的每个二进制位,运算结果是二进制数。4.除“~”以外,均为二目(元)运算符。11.111.1位运算符位运算符11.111.1位运算符位运算符按位与运算符(&)1.运算规则:0&0=01&0=00&1=01&1=1▲只要对应位上的值均为1则该位上的结果值为1。2.特殊作用:①将一个存储单元各位清0。②取某个数中的某些位。▲方法:将本数与某个特定数按位与运算即可。【例11.1】main(){inta=9,b=5,c;c=a&b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}11.111.1位运算符位运算符11.111.1位运算符位运算符按位或运算符(|)1.运算规则:0|0=01|0=10|1=11|1=1▲只要对应位上的值其中一个为1则该位上的结果值为1。2.特殊作用:①常用于将一个数的某些特定位置为1▲方法:将本数与某个特定数按位或运算即可。【例11.2】main(){inta=9,b=5,c;c=a|b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}11.111.1位运算符位运算符11.111.1位运算符位运算符按位异或运算符(^)1.运算规则:0^0=01^0=10^1=11^1=0▲只要对应位上的值互不相同则该位上的结果值为1。2.特殊作用:①使某些特定位翻转。②任何数与0相异或结果保留原数本身。③交换两个变量的值不用中间变量。a=a^b;b=b^a;a=a^b;▲注意给变量赋值的先后顺序。【例11.3】main(){inta=9;a=a^5;printf("a=%d\n",a);}11.111.1位运算符位运算符11.111.1位运算符位运算符按位求反运算符(~)1.运算规则:~0=1~1=0▲对每个上的值按位求反:1变为0;0变为1。▲例如~9的运算为:~(0000000000001001)结果为:111111111111011011.111.1位运算符位运算符11.111.1位运算符位运算符按位求反运算符(~)▲注意:~运算符比算术运算、关系运算、逻辑运算和其它运算的优先级别都高。例如:~a&b先进行~a运算,然后进行&运算。11.111.1位运算符位运算符11.111.1位运算符位运算符左位移运算符(<<)1.运算规则:a=a<>)1.运算规则:a=a>>n将a中所有位向右移动n位。2.运算的作用相当于除法运算。右移一位相当于除以2。11.111.1位运算符位运算符11.111.1位运算符位运算符右位移运算符(>>)【注意】注意数的符号问题[即正负的问题]。▲对于无符号数[正数]右移时高位补以0。▲对于有符号数,高位为0[正数]右移时高位补以0。▲对于有符号数,高位为1[负数]时:①右移时高位补以0,称之为“逻辑位移”。②右移时高位补以1,称之为“算术位移”。▲TC采用“算术位移”,高位补以1。11.111.1位运算符位运算符11.111.1位运算符位运算符位运算赋值运算符位运算符与赋值运算符可以组成复合赋值运算符如:&=,|=,>>=,<<=,∧=例如:a&=b相当于:a=a&ba<<=...