假设您有一个数字
n,并希望从
i到
j(i = 5,j = 10)。
请注意,这
i=0将为您提供最后一点
int value = n & (((1 << (j-i)) - 1) << i );
会给你结果。
左侧很明显:您有一个值,并将在其上放置一个位掩码。
掩码的值是
((1 << (j-i)) - 1) << i。它说:
- 以一个
1
位(值0000000000000001
) - 左移
j-i
次数(值:2 ^(10-5)= 2 ^ 5 = 32 =0000000000100000
) - 减去1(值:31 =
0000000000011111
)-您是否看到最低位反转了? - 左移
i
次数(值:31 * 32 = 992 =0000001111100000
)
因此,您已经获得了5-10位的位掩码(更确切地说,是从5到9,因为不包括第10位)。



