C语言计算的程序运行结果

有点看不懂题目的意思,书上百度都没找到相关例题,答案是8没有过程
希望有人可以教教我🥺

img

n=054,8进制,即0010 1100
&按位与,参与运算的位都为1结果才是1,因此0x22222222参与运算的也就0x22,高位上的都和0与运算结果为0了。

n= 054 : 0010 1100 
n= (n & 0x22222222) + ((n>>1)& 0x55555555);
   (n & 0x22222222) = 054 & 0x22 = 0010 1100 & 0010 0010 = 0010 0000 = 0x20 = 32
   (n>>1) = 0001 0110 
   (n>>1) & 0x55 = 0001 0110  & 0101 0101 = 0001 0100 = 0x14 = 20

n=32+20=52  
----------------------
n= (n & 0x77) + ((n>>2)& 0x33);
   (n & 0x77) = 52 & 0x77 = 0011 0100 & 0111 0111 = 0011 0100 = 0x34 = 52
   (n>>2) = 1101
   (n>>2)& 0x33 = 1101 & 0011 0011 = 0001 = 1

n=52+1 =53
----------------------
n= (n & 0x0f) + ((n>>4)& 0x0f);
   (n & 0x0f) = 53 & 0x0f = 0011 0101 & 1111 = 0101 = 5
   (n>>4) = 0011
   (n>>4)& 0x0f = 0011 & 1111 = 0011 = 3
   
n=5+3=8
 

后面几个式子+左边都是n,右边都是0