第10章位运算
第10章 位 运 算
位运算是指对二进制位进行的运算。每个二进制位中 只能存放0或1。因此,位运算就是对二进制数的运算。通 常,将一个数据用二进制数表示后,最右边的二进制位称 为最低位(第0位),最左边的二进制位为最高位。 1514131211109876543210 图10.1微机中整数的二进制位表示
位运算是指对二进制位进行的运算。每个二进制位中 只能存放0或1。因此,位运算就是对二进制数的运算。通 常,将一个数据用二进制数表示后,最右边的二进制位称 为最低位(第0位),最左边的二进制位为最高位。 图10.1 微机中整数的二进制位表示 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
10.1二进制位运算 10.2位段 10.3程序举例
10.1 二进制位运算 10.2 位 段 10.3 程序举例
10.1二进制位运算 在C语言中共提供了6种位运算符,如表10.所示。 表10.1 位运算符 意义 按位与 按位或 按位异或 按位取反 左移 右移 没回日录
10.1 二进制位运算 在C语言中共提供了6种位运算符,如表10.1所示。 表10.1 位运算符 意 义 & | ^ ~ > 按位与 按位或 按位异或 按位取反 左移 右移
(1)在这6种位运算符中,其中按位取反是单目运算符, 只有一个运算对象,其他均为双目运算符,有两个运算对象 (2)位运算的运算对象只能是整型(包括int, short, long和 unsigned)或字符型数据,而不能是实型数据。 (3)各位运算符的优先级比较分散,与其他运算符一起, 其优先级从高到低如下: 逻辑非()→>按位取反()→算术运算符→左移运算符()→关系运算符→按位与运算符(&),按位异 或运算符(^),按位或运算符()→&&与→赋值运算符
(1)在这6种位运算符中,其中按位取反是单目运算符, 只有一个运算对象,其他均为双目运算符,有两个运算对象。 (2)位运算的运算对象只能是整型(包括int,short, long和unsigned)或字符型数据,而不能是实型数据。 (3)各位运算符的优先级比较分散,与其他运算符一起, 其优先级从高到低如下: 逻辑非(!)→按位取反(~)→算术运算符→左移运算符(>)→关系运算符→按位与运算符(&),按位异 或运算符(^),按位或运算符(|)→&&与|| →赋值运算符
1.“按位与”运算符(&) “按位与”的运算符为“&”。其运算规则是:若两个运算 对象的对应二进制位均是1,则结果的对应位是1,否则为0。 利用“按位与”运算可以实现以下功能 (1)取出数据中指定的位 (2)将数据中的指定位清零
1.“按位与”运算符(&) “按位与”的运算符为“&”。其运算规则是:若两个运算 对象的对应二进制位均是1,则结果的对应位是1,否则为0。 利用“按位与”运算可以实现以下功能: (1)取出数据中指定的位 (2)将数据中的指定位清零
按位或”运算符(|) “按位或”的运算符为“{”。其运算规 则是:若两个运算对象的对应二进制位中 有一个是1,则结果的对应位是1,否则为0
2.“按位或”运算符(|) “按位或”的运算符为“|”。其运算规 则是:若两个运算对象的对应二进制位中 有一个是1,则结果的对应位是1,否则为0
例10.2下列C程序的功能是将整型数组中所有元素转换 为不小于它的最小奇数,并显示输出。。 #include stdio. h' main {intk,a10]={23,14,24,31,46,55,33,68,27,40} for(k=0;k<10;k++) printf("%5d", a[) printf( in") for(k=0;k<10;k++) ak=ak0x0l for(k=0;k<10;k++) printf("%5d", a[kD; printf("n")
例10.2 下列C程序的功能是将整型数组中所有元素转换 为不小于它的最小奇数,并显示输出。。 #include "stdio.h" main() { int k,a[10]={23,14,24,31,46,55,33,68,27,40}; for (k=0;k<10;k++) printf("%5d",a[k]); printf("\n"); for (k=0;k<10;k++) a[k]=a[k]|0x01; for (k=0;k<10;k++) printf("%5d",a[k]); printf("\n"); }
3.“按位异或”运算符(^) “按位异或”的运算符为“^”。其运算规则是:若两个 运算对象的对应二进制位不相等,则结果的对应位是1,否 则为0。 。“按位异或”运算具有以下几个性质: (1)使数据中的某些位取反,即将0变为1,1变为0。 2)同一个数据进行异或运算后,其结果为0。利用异或 运算的这个性质,可以将变量清零 (3)可以实现交换两个变量的值:
3.“按位异或”运算符(^) “按位异或”的运算符为“^” 。其运算规则是:若两个 运算对象的对应二进制位不相等,则结果的对应位是1,否 则为0。 “按位异或”运算具有以下几个性质: (1)使数据中的某些位取反,即将0变为1,1变为0。 (2)同一个数据进行异或运算后,其结果为0。利用异或 运算的这个性质,可以将变量清零。 (3)可以实现交换两个变量的值:
4.“按位取反”运算符() “按位取反”的运算符为“~”。其运算规则是:将运 算对象中的各二进制位值取反,即将0变为1,1变为0
4.“按位取反”运算符(~) “按位取反”的运算符为“~”。其运算规则是:将运 算对象中的各二进制位值取反,即将0变为1,1变为0