unsigned int reverseBits(unsigned int v){
unsigned int r = v
int s = sizeof(v) * 8 - 1
for (v >>= 1vv >>= 1) {
r <<= 1
r |= v &1
s--
}
r <<= s
return r
}
int main()
{
unsigned int i=0xf000f000
printf("%08X =>%08X",i,reverseBits(i))
return 0
}
==========
F000F000 =>000F000F
与C语言的是一样的功能。15是F的意思。就是4位bit, r是红色 , r&15 相当于r&0x0F, 也就是,,过滤掉高位0XF0位置上的内容,只保留低4bit
r>>4是向右移位4bit,通常是指将高位4位移动低位4位上。
*256相当于<<8,就是左移8位的意思。
用这些办法是为了提高效率。或者是取其中一段的bit用来计算。
x>>1是对位来的,对照储存来看r本来是8,二进制下就是
0000 0000 0000 1000(二字节)
进行移位操作就是把所有位置的数往右边移动,右边是数字1,所以是移动一位,也就是
0000 0000 0000 0100 (最前面的补充0)
相当于除以2。
题目应该是这样的吧:
int x=8
printf("%d\n",x>>1);
结果是
4