推荐一本书呗

Posted ^~~^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐一本书呗相关的知识,希望对你有一定的参考价值。

 1 #include <iostream>
 2 #include <vector>
 3 #include <bitset>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     cout << "Hello world!" << endl;
10     int j=0;
11     vector<int> vect;
12     for(int i=0;i<100;i++)
13     {
14         j = i << 2;
15         vect.push_back(j);
16     }
17     vector<int>::iterator begin = vect.begin();
18     while(begin!=vect.end())
19     {
20         cout << *begin++ << " ";
21     }
22     cout << endl;
23 
24     bitset<1000> b1(0);
25     b1.reset();
26     b1.set(1);
27     cout << b1.any() << endl;
28     cout << b1.all() << endl;
29     cout << b1.test(1) << endl;
30     bitset<1000> b2 = b1;
31     cout << b2.test(1) << endl;
32 
33     int result = (21 >> 3) + (21 >> 6) +1;
34     cout << "21/7: " << result << endl;
35     return 0;
36 }

只想说一下第33行的算法,当整数i/7 时,可以用这个方式:(i>>3) + (i>>6) +1。 原理如下: 

1 除法可以用移位来代替。

2 除7的话,没法移位,那就换成除8,右移3位。

3 除7和除8之间的差距是 1/7 - 1/8= 1/56.  

4 弥补这个差距,所以要加上 i/56 。用移位的话,只能右移6位,也就是除64. 2^6 = 64。

5 上一步的差距就是 1/56 - 1/64。这个我们就当作误差来处理。

6 最后加1, 原因是每次移位后,余数大致等于0.5. 两次移位下来就丢了1. 以21 为例,21/8=2(余数大致为0.5),21/64=0(余数大致为0.5). 

以上的算法,来自JDK源代码,但是源代码的算法来自于一本书<<hacker‘s delight>>。 这本书讲解了各种移位操作的经验。很多JDK开发者也都是看了这本书。

另外有一个传说,现在流行的hadoop框架作者jeff dean 送给正在学习编程的女儿了两本书,一本是 hacker‘s delight 另一本就是 taocp。

 

以上是关于推荐一本书呗的主要内容,如果未能解决你的问题,请参考以下文章

书籍推荐丨阿里P9P10技术大牛送给各位的一本书:不止代码

有啥关于 Spark 的书推荐?

为 C 示例中的棘手问题推荐一本书,如果条件异常 [重复]

推荐一个人一本书

提高代码质量推荐要看的5本书籍

推荐一本书java数组