1、第13章 中断和位运算,13.1 中 断13.2 位 运 算,13.2 位 运 算,13.2.1 位运算符 C语言提供了6种位运算运算符。 & 按位与运算 | 按位或运算 按位异或运算 按位取反运算 按位右移运算其中运算符是单目运算符,其余的都是双目运算符。位运算的运算对象只能是整型和字符型数据,不能是浮点型数据。当位运算两侧的运算对象类型不相同时,要发生类型的自动转换。,1按位与运算&运算的含义是对参与按位与运算的两个运算对象按二进制方式对对应位进行与运算,也就是对参与运算的两个运算对象的机器码的对应位进行与运算。当与运算的两个对应位都为1时,运算结果的对应位也为1;否则运算结果的对应位为0
2、。,假定某函数体有数据描述: int a=3,b=1; char c=A 那么: (1)表达式a & 6的值是2。 a的机器码 = 0000 0000 0000 0011 & 6的机器码= 0000 0000 0000 01100000 0000 0000 0010,2按位或运算 按位或运算的含义是对参与按位或运算的两个运算对象按二进制方式对对应位进行或运算,也就是对参与运算的两个运算对象的机器码的对应位进行或运算。当或运算的两个对应位都为0时,运算结果的对应位也为0;否则运算结果的对应位为1。,假定某函数题有数据描述: int a=3,b=1; char c=A 那么: (1)表达式a |
3、6的值是7 。 a的机器码 = 0000 0000 0000 0011 6的机器码 = 0000 0000 0000 01100000 0000 0000 0111,3按位异或运算 运算的含义是对参与按位异或运算的两个运算对象按二进制方式对对应位进行异或运算,也就是对参异或运算的两个运算对象的机器码的对应位进行异或运算。当异或运算的两个对应位不相同时,运算结果的对应位为1;否则运算结果的对应位为0。,假定某函数题有数据描述: int a=3,b=1; char c=A 那么: 表达式a 6的值是5。 a的机器码 = 0000 0000 0000 0011 6的机器码 = 0000 0000 0
4、000 01100000 0000 0000 0101,4按位取反运算运算的含义是对参与取反运算的运算对象按二进制方式对每一个位求反,也就是对参与取反运算的运算对象的机器码按位取反。如果某位为1,则变为0;为0,则变为1。取反运算符是单目运算符。,假定某函数题有数据描述: int a=3,b=1; 那么: a的机器码 0000 0000 0000 0011 a的机器码 1111 1111 1111 1100 取反后a的值为4。 b的机器码 1111 1111 1111 1111 b的机器码 0000 0000 0000 0000 取反后b的值为0。,5按位左移运算运算符的作用是对参与运算的运算
5、对象按规定的位移数进行左移,即对运算对象的机器码左移规定的位。运算符的左操作数是需要移位的数据,右操作数是移位的位数。在移位的过程中高位移出的位舍弃,低位左移后补0。运算符构成的表达式一般格式为an,其中a是需要移位的数据,n是移位的位数。,假定某函数题有数据描述: int a=3,b= 1; 那么: a1 移位前a的机器码 = 0000 0000 0000 0011移位后a的机器码 = 0000 0000 0000 0110 左移后补0 移位后a=6。 b4 移位前b的机器码 = 1111 1111 1111 1111移位后b的机器码 = 1111 1111 1111 0000 左移后补0
6、移位后b= 16。,6按位右移运算运算符的作用是对参与运算的运算对象按规定的位移数进行右移,即对运算对象的机器码右移规定的位。运算符的左操作数是需要移位的数据,右操作数是移位位数。在移位的过程中低位移出的位舍弃,高位右移后补0或1;如果需要移位的数据是无符号数则补0,有符号数则补符号位的值。运算符构成的表达式一般格式为an,其中a是需要移位的数据,n是移位的位数。,假定某函数题有数据描述: int a=4,b= 16; 那么: a=a1 移位前a的机器码 = 0000 0000 0000 0100 移位后a的机器码 = 0000 0000 0000 0010 (黑体表示右移后补位的内容) b=b4 移位前b的机器码 = 1111 1111 1111 0000 移位后b的机器码 = 1111 1111 1111 1111 移位后b= 1。,7复合的位运算赋值运算符位运算符和赋值运算符可以组成复合的位运算赋值运算符,具体含义和复合的算术赋值运算符一样。所有的复合的赋值运算符优先级都是一样的。 复合的位运算赋值运算符有 则a=2的值为64。,