《程序员面试宝典》一些笔记(2)
来源:互联网 发布:数据库开发岗位认识 编辑:程序博客网 时间:2024/04/28 10:12
在书中看到一些技巧的东西,方法都很巧妙,这里记录一下:
1. 判断一个整数是否是2的N次方:
方法:
X&(X-1)上面的式子中,如果X为2的N次方,例如二进制1000,结果就会为0。这个方法非常巧妙,还可以用来判断一个整数中,二进制表示中1的个数,如下:
1 int count=0;2 int m=9999;3 while(m){4 count++;5 m = m&(m-1);6 }程序中第5行,每执行一次,会把m中最低位的1清零。所以最终count最终就得到m中1的个数。
2. 不用判断语句求a、b中的最大值:
方法1:
int max = ((a+b) + abs(a-b)) / 2;这是个数学运算,还是很巧妙的。
方法2:
1 int c = a - b;2 char* strs[2] = {"a大", "b大"};3 c = unsigned(c) >> (sizeof(int)*8 - 1);4 cout << strs[c] << endl;这里第利用了负数,最高为符号为为1的特性。如果b大于a,则第一行中得到c为负数,在第3行中,利用无符号数的右移位(高位补零),留下c最高位,即符号位。
3. 不使用中间变量交换a、b的值:
方法1:
1 a = a - b;2 b = a - b;3 a = a - b;结果是显而易见的,但是找个方法有一个缺陷是第一行a + b得到的结果可能会越界。下面的方法2则不会存在这样的问题。
方法2:
1 a = a ^ b;2 b = a ^ b;3 a = a ^ b;这里采用异或运算,不会存在数值越界的问题。很巧妙啊!!
- 《程序员面试宝典》一些笔记(2)
- 《程序员面试宝典》一些笔记(1)
- 《程序员面试宝典》一些笔记(3)
- 程序员面试宝典笔记
- 程序员面试宝典笔记
- 《程序员面试宝典第四版》笔记2
- 《程序员面试宝典(二)》笔记
- c++程序员面试宝典笔记(一)
- c++程序员面试宝典笔记(二)
- java程序员面试宝典(刘磊版)笔记
- 《程序员面试宝典》学习笔记(1)
- 【求职】程序员面试宝典--笔记
- <<Java程序员面试宝典>>笔记
- 程序员面试宝典知识点笔记
- java程序员面试宝典笔记
- 程序员面试宝典_笔记
- java程序员面试宝典(2)
- JAVA程序员面试宝典(2)
- Windows CE与Linux与Vxworks的区别
- 在Windows系统挂载linux NFS分享目录
- fileinputstream
- 队列
- 高性能接入sever开发优化
- 《程序员面试宝典》一些笔记(2)
- pku acm 1080
- 一步步学Qt,第五天-Qt这样的小小差异你发现了多少
- vc2008编译器居然还有这个问题-不能加太多头文件路径
- linux中的文件有关的结构信息
- 软件开发,标准化流水线式开发的实施构想
- Spring Jms入门实例
- Everyday English
- 一个操作系统的实现 第四章 pmtest3