巧用位操作進行整除(高效計算)

2021-09-01 18:56:50 字數 512 閱讀 7345

最近連續看到兩個利用位操作進行整除的**,感覺特別好,做個筆記。

第乙個:某個數除以8(整形資料的整除)。

int a = 9;

int b = a >> 3 << 3; // int b = a / 9;

第二個:

#define _intsizeof(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

注釋:先加上int變數大小少1,再將後面的某幾位置零。

要理解這個困難點,不過就int變數在32、64位作業系統裡都是4位元組來看:sizeof(int)-1就是3,二進位制:011,取反1...100,所以相當於整除以4。那麼這個巨集定義就是:變數n無論多少個位元組,加上3,再整除4就是n占用記憶體大小,注意是占用。

根據第二個,聯想到小數點四捨五入演算法:

保留小數點後2位(四捨五入):float b = ((int)((a * 100) + 0.5)) / 100.0

以前我在excel裡常用。

高效位操作技巧

檢測乙個無符號數是不為2 n 1 為冪 x x 1 將最右側0位改為1位 x x 1 二進位制補碼運算公式 x x 1 x 1 x x 1 x x 1 x x 1 x y x y 1 x y x y x y x y 1 x y x y x y x y x y x y x y y x y x y x ...

7 4 2 使用聚合操作進行計算

7.4.2 使用聚合操作進行計算 聚合背後的概念在於我們保持一些狀態,將在整個操作過程中傳遞。我們用乙個初始狀態開始,用給定的處理函式,為文件中的每個部件,計算乙個新的狀態。這種概念被反映在函式的簽名中 val aggregatedocument a documentpart a a documen...

7 4 2 使用聚合操作進行計算

7.4.2 使用聚合操作進行計算 聚合背後的思想是,在整個操作過程中,傳遞的某些狀態能夠被保持。我們首先初始狀態,用給定的處理函式,為文件中的每個部分,計算出乙個新的狀態。這種思想反映在函式的簽名中 val aggregatedocument a documentpart a a documentp...