在该书第97页讲了一种令人费解说明,或者说我暂时无法理解它的讲解,所以我打算在此好好理解说明一下给自己看。
我感觉它说反了,那么我来重新说一下吧。一个非0数的二进制位表示中肯定至少有一个1,假设这个1是从左到右第m位,那么这个数减1的话,那么它第m位从1变成0,其他位不变。如果第m为是0的话,经过减1运算之后,那么它前面的0都会变成1,而遇到的第1个1会变成0,比如二进制数11000,最后一位减1得到10111。然后将10111与11000做与运算得到10000。如果第m为1,比如说是11001,减1后变成11000,然后将11000与11001做与运算得到11000。
从上面两个实例可以看出,一个数将1以后再与原数做与运算最后得到的数的最有一个1将会变成0。这是个有趣的现象。
基于这个思想,那就是说一个数有多少个1就可以进行多少个这样的运算直到整个数变成0。
那么就可以使用这个性质来计算1的个数。