您的位置:首页 > 职场人生

程序员面试宝典(第5章)部分考题

2013-09-20 15:42 176 查看
(一)考点:类型转换、算符的优先级 

#include <iostream>

using namespace std;

int main()

{

 unsigned char a=0xA5;

 unsigned char b=~a>>4+1;

 printf("b=%d\n",b);  //250

 return 0;
}

(二)用一个表达式,判断一个数X是否是2^n次方(2,4,8,16.......),不可用循环语句。

         2、4、8、16.......这样的书转化成二进制是10、100   1000   10000.。。。。。如果X减去1后与X做与运算,答案如果是0,则是X是2^n次方

        !(X&(X-1))

(三)求平均数

        int f(int x,inty)

         {

         return (x&y)+((x^y)>>1);

         }

      如果你能看出这是求x+y的平均数,就不必看解释了。

      解释如下:

                        (x&y)解释为x、y共同为1的部分,也就相当为相同为的一半

                        (x^y)>>1解释为x、y不相同的部分求和,右移相当于除2

 (四)找出两个数中间比较大的

         int max=((a+b)+abs(a-b))/2;

       除可用if、?:、switch

  (五)如何将a、b的值进行交换,并且不使用任何中间变量?

       答:两种方法

                【1】a=a+b;

                          b=a-b;

                          a=a-b;     缺点:a=a+b时有可能造成越界

                【2】用异或 a=a^b;

                                       b=a^b;

                                       a=a^b;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: