C/C++题目--位运算

时间:2025-03-09 19:15:21

题目:有这样一个巧妙的表达式:

a^=b^=a^=b;

它不需要临时变量就可以交换a和b的值。

答案

这不具有可移植性。它试图在序列点之间两次修改变量a,而这种行为是未定义的。例如,有人报告如下代码:

int a=123,b=7654;

a^=b^=a^=b;

在SCO优化C编译器下会把b置为123,把a置为0。

题目:取一个整数a从右端开始的4~7位。

【答案】

  1. main()
  2. {
  3. unsigned a,b,c,d;
  4. scanf("%o",&a);
  5. b=a>>4;
  6. c=~(~0<<4);
  7. d=b&c;
  8. printf("%o\n%o\n",a,d);
  9. }

题目:一条语句实现x是否为2的若干次幂的判断。

【答案】

  1. void mai n()                                               
  2. {                                         
  3. i nt a;                                                        
  4. scanf(“%d”,&a);                                   
  5. printf(“%c”,(a)&(a-1)?’n’:’y’); //   若是打印y,否则n         
  6. }

题目:求下面函数的返回值(微软)

  1. int fun(x)
  2. {
  3. int countx=0;
  4. while(x)
  5. {
  6. countx++;
  7. x=x&(x-1);
  8. }
  9. return countx;
  10. }

假定x=9999。

【答案】

8