北大C++程序設(shè)計(jì)在線課筆記,位運(yùn)算

1.3 位運(yùn)算
位運(yùn)算:
用于對(duì)整數(shù)類型(int,char, long 等)變量中的某一位(bit)离斩,或者若干位進(jìn)行操作银舱。比如:

  1. 判斷某一位是否為1
  2. 只改變其中某一位,而保持其他位都不變跛梗。
    C/C++語(yǔ)言提供了六種位運(yùn)算符來(lái)進(jìn)行位運(yùn)算操作:
    & 按位與(雙目)
    | 按位或(雙目)
    ^ 按位異或(雙目)
    ~ 按位非(取反)(單目)
    << 左移(雙目)

右移(雙目)

按位與 “&”通常用來(lái)將某變量中的某些位清0且同時(shí)保留其他位不變寻馏。
也可以用來(lái)獲取某變量中的某一位。
例如核偿,如果需要將int型變量n的低8位全置成0诚欠,而其余位不變,則可以執(zhí)行:
n = n & 0xffffff00;
也可以寫(xiě)成:
n &= 0xffffff00;
如果n是short類型的漾岳,則只需執(zhí)行:
n &= 0xff00;
如何判斷一個(gè)int型變量n的第7位(從右往左轰绵,從0開(kāi)始數(shù))是否是1 ?
只需看表達(dá)式 “n & 0x80”的值是否等于0x80即可。
0x80: 1000 0000

按位或 “|”
按位或運(yùn)算通常用來(lái)將某變量中的某些位置1且保留其他位不變蝗羊。
例如藏澳,如果需要將int型變量n的低8位全置成1,而其余位不變耀找,則可以執(zhí)行:
n |= 0xff;
0xff: 1111 1111

按位異或 “^”
按位異或運(yùn)算通常用來(lái)將某變量中的某些位取反翔悠,且保留其他位不變。
例如野芒,如果需要將int型變量n的低8位取反蓄愁,而其余位不變,則可以執(zhí)行:
n ^= 0xff;
0xff: 1111 1111
異或運(yùn)算的特點(diǎn)是:
如果 a^b=c狞悲,那么就有 c^b = a以及c^a=b撮抓。(窮舉法可證)
此規(guī)律可以用來(lái)進(jìn)行最簡(jiǎn)單的加密和解密。
另外異或運(yùn)算還能實(shí)現(xiàn)不通過(guò)臨時(shí)變
量摇锋,就能交換兩個(gè)變量的值:
int a = 5, b = 7;
a = a ^ b;
b = b ^ a;
a = a ^ b;
即實(shí)現(xiàn)a,b值交換丹拯。窮舉法可證。

左移運(yùn)算符 “<<”
表達(dá)式:
a << b
的值是:將a各二進(jìn)位全部左移b位后得到的值荸恕。左移時(shí)乖酬,高位丟棄,低位補(bǔ)0融求。a 的值不因運(yùn)算而改變咬像。
實(shí)際上,左移1位,就等于是乘以2县昂,左移n位肮柜,就等于是乘以2的n次方。而左移操作比乘法操作快得多倒彰。

右移運(yùn)算符 “>>”
表達(dá)式:
a >> b
的值是:將a各二進(jìn)位全部右移b位后得到的值审洞。右移時(shí),移出最右邊的位就被丟棄待讳。 a 的值不因運(yùn)算而改變预明。
對(duì)于有符號(hào)數(shù),如long,int,short,char類型變量耙箍,在右移時(shí),符號(hào)位(即最高位)將一起移動(dòng)酥馍,并且大多數(shù)C/C++編譯器規(guī)定辩昆,如果原符號(hào)位為1,則右移時(shí)高位就補(bǔ)充1旨袒,原符號(hào)位為0汁针,則右移時(shí)高位就補(bǔ)充0。
實(shí)際上砚尽,右移n位施无,就相當(dāng)于左操作數(shù)除以2的n次方,并且將結(jié)果往小里取整必孤。
-25 >> 4 = -2
-2 >> 4 = -1
18 >> 4 = 1

思考題
有兩個(gè)int型的變量a和n(0 <= n <= 31)猾骡,
要求寫(xiě)一個(gè)表達(dá)式,使該表達(dá)式的值和a的第n位相同敷搪。
答案:( a >> n ) & 1
另一答案:(a & (1 << n )) >> n

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兴想,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赡勘,更是在濱河造成了極大的恐慌嫂便,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闸与,死亡現(xiàn)場(chǎng)離奇詭異毙替,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)践樱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)厂画,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人映胁,你說(shuō)我怎么就攤上這事木羹。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵坑填,是天一觀的道長(zhǎng)抛人。 經(jīng)常有香客問(wèn)我,道長(zhǎng)脐瑰,這世上最難降的妖魔是什么妖枚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮苍在,結(jié)果婚禮上绝页,老公的妹妹穿的比我還像新娘。我一直安慰自己寂恬,他們只是感情好续誉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著初肉,像睡著了一般酷鸦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牙咏,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天臼隔,我揣著相機(jī)與錄音,去河邊找鬼妄壶。 笑死摔握,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丁寄。 我是一名探鬼主播氨淌,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狡逢!你這毒婦竟也來(lái)了宁舰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奢浑,失蹤者是張志新(化名)和其女友劉穎蛮艰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雀彼,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壤蚜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徊哑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袜刷。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖莺丑,靈堂內(nèi)的尸體忽然破棺而出著蟹,到底是詐尸還是另有隱情墩蔓,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布萧豆,位于F島的核電站奸披,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涮雷。R本人自食惡果不足惜阵面,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洪鸭。 院中可真熱鬧样刷,春花似錦、人聲如沸览爵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜓竹。三九已至沃疮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梅肤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工邑茄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姨蝴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓肺缕,卻偏偏與公主長(zhǎng)得像左医,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子同木,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • ?1 C語(yǔ)言程序的結(jié)構(gòu)認(rèn)識(shí) 用一個(gè)簡(jiǎn)單的c程序例子浮梢,介紹c語(yǔ)言的基本構(gòu)成、格式彤路、以及良好的書(shū)寫(xiě)風(fēng)格秕硝,使讀者對(duì)c語(yǔ)...
    CONLYOUC閱讀 8,697評(píng)論 9 66
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,737評(píng)論 0 33
  • 院里的春梅到了該綻放的時(shí)節(jié)洲尊,愿我莫再錯(cuò)過(guò)花期远豺,辜負(fù)歲序美意。你看坞嘀,時(shí)光往返自如躯护,無(wú)情無(wú)愛(ài),不必牽附于人丽涩,亦無(wú)須掛礙...
    盤(pán)古大觀閱讀 1,942評(píng)論 16 36
  • 我期待有一天你會(huì)闖進(jìn)我的生活,那這些植物會(huì)得到耐心又細(xì)心的照顧吧继准。你說(shuō)风皿,北方的冬天清冷干燥光稼,有這樣幾抹綠色在,也堪...
    君莫笑ID閱讀 432評(píng)論 1 4
  • 這段時(shí)間準(zhǔn)備自己寫(xiě)一個(gè)博客使用react,因此自然也接觸到了很流行的打包工具webpack妈候。寫(xiě)了一個(gè)簡(jiǎn)單的reac...
    YingQQQ閱讀 593評(píng)論 0 1