您好,登錄后才能下訂單哦!
這篇文章主要介紹在c++中移位運(yùn)算的規(guī)則分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
移位運(yùn)算符在程序設(shè)計(jì)中,是位操作運(yùn)算符的一種。移位運(yùn)算符可以在二進(jìn)制的基礎(chǔ)上對(duì)數(shù)字進(jìn)行平移。按照平移的方向和填充數(shù)字的規(guī)則分為三種:<<(左移)、>>(帶符號(hào)右移)和>>>(無(wú)符號(hào)右移)。
移位運(yùn)算簡(jiǎn)介
在c++中,移位運(yùn)算符有雙目移位運(yùn)算符:<<(左移)和>>(右移)。移位運(yùn)算符組成的表達(dá)式也屬于算術(shù)表達(dá)式,其值為算術(shù)值。左移運(yùn)算是將一個(gè)二進(jìn)制位的操作數(shù)按指定移動(dòng)的位數(shù)向左移動(dòng),移出位被丟棄,右邊移出的空位一律補(bǔ)0。右移運(yùn)算是將一個(gè)二進(jìn)制位的操作數(shù)按指定移動(dòng)的位數(shù)向右移動(dòng),移出位被丟棄,左邊移出的空位一律補(bǔ)0,或者補(bǔ)符號(hào)位,這由不同的機(jī)器而定。在使用補(bǔ)碼作為機(jī)器數(shù)的機(jī)器中,正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1。
在移位運(yùn)算時(shí),byte、short和char類(lèi)型移位后的結(jié)果會(huì)變成int類(lèi)型,對(duì)于byte、short、char和int進(jìn)行移位時(shí),編譯器未做任何優(yōu)化的情況下(優(yōu)化后不可預(yù)期),規(guī)定實(shí)際移動(dòng)的次數(shù)是移動(dòng)次數(shù)和32的余數(shù),也就是移位33次和移位1次得到的結(jié)果相同。移動(dòng)long型的數(shù)值時(shí),規(guī)定實(shí)際移動(dòng)的次數(shù)是移動(dòng)次數(shù)和64的余數(shù),也就是移動(dòng)66次和移動(dòng)2次得到的結(jié)果相同。
三種移位運(yùn)算符的移動(dòng)規(guī)則和使用如下所示:
移位運(yùn)算左移運(yùn)算符(<<)規(guī)則
按二進(jìn)制形式把所有的數(shù)字向左移動(dòng)對(duì)應(yīng)的位數(shù),高位移出(舍棄),低位的空位補(bǔ)零。
語(yǔ)法格式:
需要移位的數(shù)字<<移位的次數(shù)
例如:3<<2,則是將數(shù)字3左移2位
計(jì)算過(guò)程:
3<<2
首先把3轉(zhuǎn)換為二進(jìn)制數(shù)字00000000000000000000000000000011,然后把該數(shù)字高位(左側(cè))的兩個(gè)零移出,其他的數(shù)字都朝左平移2位,最后在低位(右側(cè))的兩個(gè)空位補(bǔ)零。則得到的最終結(jié)果是00000000000000000000000000001100,則轉(zhuǎn)換為十進(jìn)制是12。
數(shù)學(xué)意義:
在數(shù)字沒(méi)有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),左移一位都相當(dāng)于乘以2的1次方,左移n位就相當(dāng)于乘以2的n次方。
以上是“在c++中移位運(yùn)算的規(guī)則分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。