1.位运算符
在此之前介绍的各种运算都是以字节作为最基本单位进行的运算,位运算则是以位(bit)一级进行的运算。C语言提供了6种位运算符。各种位运算符的含义见表7-1。
表7-1 位运算符
说明:
① 位运算符除了“~”外,均为双目运算符,即要求运算符两侧各有一个运算量。
2.位运算符的作用
(1)按位取反运算
运算符“~”是单目运算符,运算对象位于运算符的右边,其功能是把运算对象的内容按位取反,即使0变成1;使1变成0。
例如:计算i,j的输出值。
本例中,7的二进制形式为111,3的二进制形式为011,所以“7^3”的二进制形式为111^011=100,而100转换为十进制数为4;4的二进制形式为100,3的二进制形式为011,所以“~4&3”的二进制形式为~100&011=011&011=011,而011转换为十进制数为3。故本例的输出结果为:i=4, j=3
(2)左移运算
运算符“<<”是双目运算符。其左边是移动对象,右边是整型表达式代表左移的位数。左移时,右端低位补0,左端高位移出的部分舍弃。
例如:计算k的输出值。
本例中,变量j的初始值为2,所以“j<<2”表示j的二进制值左移两位,即扩大4倍,所以变量j的值变为8,然后与i的值1进行异或运算的结果为9。故本例的输出结果为:k=9
(3)右移运算
运算符“>>”是双目运算符。其左边是移动对象,右边是整型表达式代表右移的位数。右移时,右端低位移出的部分舍弃,左端高位移入的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1。(www.xing528.com)
例如:计算k的输出值。
本例中“>>”的优先级高于“^”。先计算j>>2得二进制数001;由于i=2 换算成二进制数为010,所以再计算010 ^001 ,得二进制数为011,即十进制数为3。
(4)按位与运算
按位与“&”运算的作用是将参加运算的两个数中相对应的二进制位上,分别进行“与”运算,当两个相应的位都为1时,该位的结果为1,否则为0。
例如:计算k的输出结果。
因为i=7换算成二进制数为111,j=5换算成二进制数为101,所以i和j的与运算结果为二进制数101,即十进制数5。
(5)按位异或运算
按位异或“^”运算的作用是将参加运算的两个数中相对应的二进制位上,若数相同,则该位的结果为0;若数不同,则该位的结果为1。
例如:计算k的输出值。
本例中,变量i=2,换算成二进制数为010,变量j=3,换算成二进制数为011,两数的异或运算结果为二进制数001。故本例的输出结果为:k=1。
(6)按位或运算
按位或“|”运算的作用是将参加运算的两个数中相对应的二进制位上,若数同为0,则该位的结果为0;否则为1。
例如将按位异或运算例子中的“k=i^j;”改为“k=i|j;”,则输出结果为:k=3。
(7)位数不同的运算数之间的运算规则
① 先将两个运算数右端对齐。
② 再将位数短的一个运算数往高位扩充(无符号数和正整数左侧用0补全,负数最左侧用1补全),然后对应数相等的两个运算数按位进行运算。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。