先介绍一下位运算的法则:
1. >>是按位右移运算符,无符号数右移一位相当于该数除以2。移位时,移出的位升羡数全部丢弃。对于无符号数,则高位补0;对于有符号数,则符号位补0还是1,不确定。
2. <<是按吵乱拍位左移运算符,无符号数左移一位相当于该数乘以2。移位时,移出的高位全部丢弃,低位全补0。
3. ~是按位取反运算符,用来对一个二进制数按位取反。即将0变1,1变0。
4. &是按位与运算符,参加运算的两个数据,按位进行与运算。如果两个相应的位都为1,则该位为1,否则为0。
5. |是按位或运算符,参加运算的两个数据,按位进行或运算。如果两个相应的位至少有一个为1,则该位为1,否则为0。
6. ^是按位异或运算符,若两个相应的位同号,则该位为0,不同则为1。
然后就你这个实际问题解答:
假设输入的a是4,对应的8位就是00000100,b是a右移4位,变成了00000000,也就是0,c的值比较麻烦,首先是把0取反,结果是全1,即11111111(此处与C编译器的位数有关,16位编译器和32位编译器结果是不陪戚同的,不过不影响最终结果),然后左移4位,变为11110000,再取反,得到00001111,也就是十进制的15,d等于b和c进行按位与,也就是00000000跟00001111按位与,结果是00000000,也就是全0,所以最终打印结果(注意是以8进制形式打印),a是原来输入的4,d是0