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

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

分享到微博請遵守國家法律
阿克陶县| 松滋市| 财经| 竹北市| 晋城| 玛多县| 象山县| 杨浦区| 林芝县| 建阳市| 天柱县| 科技| 桐柏县| 南漳县| 卢氏县| 汨罗市| 屯昌县| 定陶县| 锡林郭勒盟| 岳阳市| 淮阳县| 河曲县| 松江区| 高邑县| 通化县| 靖安县| 景东| 金溪县| 秦皇岛市| 连云港市| 邛崃市| 静安区| 韶山市| 尖扎县| 张北县| 甘谷县| 翁源县| 麻江县| 江孜县| 美姑县| 泾源县|