程序员面试宝典(第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;
#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;
相关文章推荐
- 《WCF技术内幕》翻译23:第2部分_第5章_消息:XmlDictionaryReader和回到Message
- Concepts-第5章部分翻译(2)
- 《程序员面试宝典》精华 底层部分
- (基于Java)编写编译器和解释器-第5章:解析表达式和赋值语句-第二部分(连载)
- 网管考题,稍微浅显的部分,我汗啊,居然那么多不会的
- 王爽汇编第5章部分答案
- 《WCF技术内幕》翻译26:第2部分_第5章_消息:Buffered vs Streamed、序列化和反序列化消息
- 程序员面试宝典部分习题
- Python核心编程第5章部分练习题
- 第二部分 基础篇 - 第5章 PWM
- 《WCF技术内幕》翻译21:第2部分_第5章_消息:WCF XML Stack 和 XmlDictionary
- Windows核心编程学习笔记 第二部分 完成编程任务 第5章 作业
- 《程序员面试宝典》精华 底层部分
- 《WCF技术内幕》翻译21:第2部分_第5章_消息:WCF XML Stack 和 XmlDictionary
- 程序员面试宝典部分第四版针对字符数组处理的部分程序
- Concepts-第5章部分翻译(3)
- 《程序员面试宝典》精华 面向对象部分
- 程序员面试宝典 第5章:程序设计基本概念
- 第5章部分作业的参考答案
- 【Java学习笔记】第5章:控制部分(第2部分)