昨天的3道微软面试选择题,求告诉我里面的考点是什么啊?除了说说结果
what is the output of the following program?
int func(int x)
{
int count =0;
while(x)
{
count++;
x=x&(x-1);
}
return count;
}
main()
{
printf("%d",func(9999));
}
A 8
B 9
C 10
D 11
2what is the output of the following program?
void fn(int *b)
{
(*b)++;
}
int main
{
int a=7;
int b=4;
fn(&a);
printf("%d",a&&b);
return 0;
}
A 0
B 1
C 4
D 7
3what is the output of the following program?
main()
{
int a[3][3],*p,i;
p=a[0];
for(i=0;i<9;i++)
{
*(p+i) = i+1;
}
printf ("%d",a[1][2]);
}
A 2
B 3
C 5
D 6
[解决办法]
第一题是8,目的是求一个二进制数里有多少个1。
第二题是1,目的是看你知不知道当表达式为TRUE时,TRUE的具体数值是什么。
第一题是6,目的好像是看你是不是明白C数组下标从0开始,如果答2的话VB组会招你去。
[解决办法]
1.数一的个数
2.非零的为true
3.二维数组等价一维数组(在内存中)
[解决办法]
1.难一点:
9999先转换为二进制
x-1算术运算的结果是:若x是奇数(最末位为1)则去掉这个1,否则将***100..0形式变换为***011..1(即将最后一个1及后续的0变换为0后续连续的1)
x&(x-1)则综合上面的运算效果为去掉x编码中最后一个1
while(x)循环的效果就是x不为0则计数并去掉最后(最右)一个1===》统计x的二进制码中1的个数
[解决办法]
1, 有多少个bit位是1
2,知不知道a&&b这个返回什么结果
3,知不知道二维数组在内存里就是一维排的
[解决办法]
第一题好像是7吧。
[解决办法]
又被计算器骗了吧,前面还有一个很隐蔽的1............
[解决办法]
第一题计算器就是8啊 上面的在说什么 难道数数都不会了么