fls 原始碼分析

2021-07-27 23:41:08 字數 1044 閱讀 9778

__fls 用於找到乙個long型數最後哪個bit為1,例如0x1010的話,__fls 就返回12,表示最高為是第12bit

原始碼分析如下:

static __always_inline unsigned long __fls(unsigned long word)

#endif

if (!(word & (~0ul << (bits_per_long-16))))

if (!(word & (~0ul << (bits_per_long-8))))

if (!(word & (~0ul << (bits_per_long-4))))

if (!(word & (~0ul << (bits_per_long-2))))

if (!(word & (~0ul << (bits_per_long-1))))

num -= 1;

return num;

}假定bits_per_long ==32

則~0ul ==0xffffffff

第一步:!(word & (~0ul << (bits_per_long-16))) =!(0x1010 & 0xffff0000)=1,則num -=16=15.word = 0x1010 0000

第二步:!(word & (~0ul << (bits_per_long-8))) =!(0x1010 & 0xff000000)=0,則num=15.word = 0x1010 0000

第三步:!(word & (~0ul << (bits_per_long-4))) =!(0x1010 & 0xc0000000)=0,則num=15.word = 0xf0000000

第三步:!(word & (~0ul << (bits_per_long-2))) =!(0x1010 & 0xc0000000)=1,則num=13.word = 0x40400000

第四步:!(word & (~0ul << (bits_per_long-2))) =!(0x1010 & 0x80000000)=1,則num=12.word = 0x40400000

所以最終返回12

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...