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

(一)考点:类型转换、算符的优先级 

#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;








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值