无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++ 位運算黑科技,學會了,再也不寫循環(huán)了!

2023-04-23 11:00 作者:breakerzh  | 我要投稿

代碼:

bool is_power_of_2(uint n)

{

return (n != 0) && ((n & -n) == n);

}

用途:要求數(shù)值大小必須是二的冪次的場合,比如伙伴內(nèi)存分配算法分配的內(nèi)存塊大小。

?
01:15
?

一個數(shù)是二的冪次 (power of 2) 的二進制比特特征:序列里只有一個 1。

?
01:50
?

可用特定編譯工具鏈的內(nèi)建擴展,如 gcc 的 __builtin_popcount() 得到一個整數(shù)里有多少個 1。

0 不是 2 的冪次。

?
02:55
?

一個數(shù)與其相反數(shù)的按位與 n & -n

結(jié)果是 n 的最右端置的 1。

補碼 (2's complement) -n = ~n + 1

-n 的比特性質(zhì):設(shè) n = bbb100...0,-n 會保持最右端的連續(xù) 0 子序列及左邊的第一個 1,即保持右端的 100...0 模式,而左端的 bbb 全部按位取反。從左至右看,也就是最右端的 1 及后面的 0 被保持。

所以,n & -n 中按位與會將除了右端 100...0 模式之外的,全部歸為 0,因此它的結(jié)果就是右端的 100...0 序列。而這個序列里只有一個 1,它是二的冪次。


最終,判斷 n 是不是二的冪次,就可以表示為 n == (n & -n)


C++ 位運算黑科技,學會了,再也不寫循環(huán)了!的評論 (共 條)

分享到微博請遵守國家法律
福泉市| 新和县| 会东县| 新化县| 张掖市| 深州市| 淮北市| 永丰县| 郯城县| 唐河县| 丰顺县| 汕头市| 西充县| 蓝田县| 开远市| 金堂县| 廉江市| 平顶山市| 钟祥市| 靖安县| 三明市| 汤原县| 克什克腾旗| 太仓市| 吉木萨尔县| 县级市| 长垣县| 巨野县| 乳山市| 藁城市| 筠连县| 兴国县| 扎兰屯市| 静海县| 大埔县| 奎屯市| 鹤峰县| 通辽市| 怀化市| 栾城县| 巨鹿县|