1.
int i = 1;
int main()
{
int i = i;
cout << i << endl;
return 0;
}
这是合法但不合理的。int i = i,i变量从声明那一刻起就是可见的了。main()里的i不是1,它和main()外的i无关,是一个未定义的值。
2.
int func(int x)
{
int count = 0;
while (x)
{
count ++;
x = x & (x-1);
}
return count;
}
int main()
{
cout << func(9999) << endl;
return 0;
}
func函数返回值是形参x转换为二进制后包含1的数量。9999转换为二进制是10011100001111,共8个1。
3.
int main()
{
int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d,%d/n", *ptr, *(++ptr));
return 0;
}
注意:printf计算参数时是从右到左压栈的,此题结果为8,8
4.
int main() { unsigned int a = 0xfffffff7; //字节截断,i变量3位和高于3位将被自动丢弃 unsigned char i = (unsigned char)a; //unsigned int型指针转换为char型指针 //是char类型指针的转换,而不是char类型的换转 char *b = (char *)&a; printf("%08x,%08x/n", i, *b); return 0; }
5.用一个表达式,判断一个数X是否是2的n次方,不可用循环语句。
答案:!(x&(x-1))
6.
int func(int x, int y)
{
return (x&y)+((x^y)>>1);
}
int main()
{
cout << func(729,271) << endl;
return 0;
}
func函数中,x&y的结果是x和y相同位的一半,x^y是取x和y的不同位,右移相当于除以2.
所以,这个函数的功能是取两个数的平均值。
运行结果:500
本文通过几个具体的C++代码示例介绍了位运算的应用,包括如何判断一个数是否为2的幂、计算二进制中1的个数以及计算两数的平均值等,深入解析了这些操作背后的原理。
1523

被折叠的 条评论
为什么被折叠?



