最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)了!的評論 (共 條)

分享到微博請遵守國家法律
日喀则市| 息烽县| 化隆| 海伦市| 略阳县| 陇西县| 永宁县| 湘阴县| 石城县| 武乡县| 甘谷县| 丰县| 麻江县| 遵化市| 益阳市| 清水河县| 随州市| 大理市| 丰台区| 方正县| 石首市| 凤翔县| 丹巴县| 内江市| 女性| 阿图什市| 墨脱县| 连江县| 崇明县| 鸡东县| 昔阳县| 隆德县| 鹤峰县| 鸡东县| 阿城市| 吴川市| 离岛区| 绍兴县| 冷水江市| 台东市| 慈溪市|