首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

某计算机软件大型企业的一路关于宏的笔试题,求解

2013-07-09 
某计算机软件大型企业的一道关于宏的笔试题,求解!#inculde stdio.h#define THE_MACRO(x)\(x((0xaaaaaaa

某计算机软件大型企业的一道关于宏的笔试题,求解!
#inculde <stdio.h>
#define THE_MACRO(x)\
(x=((0xaaaaaaaa&x)>>1)+(0x55555555&x),\
x=((0xcccccccc&x)>>2)+(0x33333333&x),\
x=((0xf0f0f0f0&x)>>4)+(0x0f0f0f0f&x),\
x=((0xff00ff00&x)>>8)+(0x00ff00ff&x),\
x=(x>>16)+(0x0000ffff&x))

int main()
{
    int x =34512;
    int n = THE_MACRO(x);
    printf("%d",n);
    return 1;
} 笔试 宏
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

那请问下,这个宏如何替换?
宏的定义中等式左边也是有x,右边也有,此题中的34512应该替换谁呢?

Quote: 引用:

Quote: 引用:

Quote: 引用:

看上去,应该是求有多少个二进制的1

貌似是的,请问这个怎么看出来的?谢谢~

以前在本书上看到过。单核单线程下并行计算多少个1。
a是1010,5是0101。e是1110,分别和a,5 &下,得1010和0100,然后右移1位相加,那么你就有每两位又多少个1: 10(2)01(1)。
这个值在和c(1100),3(0011)&操作,得1000, 0001,位移相加后就是每4位有几个1,0011(3)。
以此类推,最后就是32位里有多少个1。

就是字符串替换,用变量x,来替换宏的那个x参数。我们把变量改成y,看起来就清楚些。宏展开后
int y = 34512;
int n = (y=((0xaaaaaaaa&y)>>1)+(0x55555555&y)...

出这题的家伙。。。。。。不知道该说什么好


再请教最后一个哦,那岂不是变成了int n = (34512=((0xaaaaaaaa&34512)>>1)+(0x55555555&34512)...
34512=((0xaaaaaaaa&34512)>>1)+(0x55555555&34512)这一句啥意思。。


替换的是x这个字母,不是x变量的值。我举的y例子不是很明显了。用y字母替换宏体里的x。相当于编辑器里的字符串查找替换。

热点排行