1. 用一个表达式,判断X是否为2的n次方,不可用循环语句?
!X&(X-1)为真
2.判断一个数m的二进制中有几个1?
void fun(int m)
{
int count = 0;
while (m)
{
count++;
m = m&(m-1);
}
cout<
}
3.有两个变量a和b,不用if,"? :","switch"或其他判断语句,找出其中值较大的?
int max = ((a+b) + abs(a-b))/2;
4. 不使用中间变量交换a和b的值?
方法一:a = a+b; b = a - b; a = a - b; 但这种情况可能因为a,b的值太大,导致a+b超界
方法二:a = a^b; b = a^b; a = a^b;
5.在C++程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。
阅读(496) | 评论(0) | 转发(0) |