与位运算有关的编程题

利用位运算取出一个整数从右端开始的4~7位。请问做题思路是怎么样的,如何使用位运算?

int num = xx;
int num_bit = num & 0x78;

0x78对应二进制是0b01111000,也就是把对应要取的位置1其它置0就行了

假设参与运算的数是:0x78
对于一个字节来说,如果从右边是第0位算起,b4~b7是左边的4位。

b7 b6 b5 b4 b3 b2 b1 b0
0  1  1  1  1  0  0  0   == 0x78
&
1  1  1  1  0  0  0  0   == 0xF0
得到:
0  1  1  1  0  0  0  0   == 0x70
再右移4位:
0  0  0  0  0  1  1  1   == 0x07

这里需要了解“与”运算的特性,可以提取出某个位来,也可以称为掩码,这样就是0xF0。
如果你的答案想对齐到右侧,还需要右移4位,表达式就是:

int a = 0x78;
int b = (a & 0xF0) >> 4;