1 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
移位運(yùn)算符就是在二進(jìn)制的基礎(chǔ)上對(duì)數(shù)字進(jìn)行平移。按照平移的方向和填充數(shù)字的規(guī)則分為三種:<<(左移)、>>(帶符號(hào)右移)和>>>(無(wú)符號(hào)右移)。
在移位運(yùn)算時(shí),byte、short和char類(lèi)型移位后的結(jié)果會(huì)變成int類(lèi)型,對(duì)于byte、short、char和int進(jìn)行移位時(shí),規(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)算規(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ù)字0000 0000 0000 0000 0000 0000 0000 0011,然后把該數(shù)字高位(左側(cè))的兩個(gè)零移出,其他的數(shù)字都朝左平移2位,最后在低位(右側(cè))的兩個(gè)空位補(bǔ)零。則得到的最終結(jié)果是0000 0000 0000 0000 0000 0000 0000 1100,則轉(zhuǎn)換為十進(jìn)制是12.數(shù)學(xué)意義:
在數(shù)字沒(méi)有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),左移一位都相當(dāng)于乘以2的1次方,左移n位就相當(dāng)于乘以2的n次方。
>>運(yùn)算規(guī)則:按二進(jìn)制形式把所有的數(shù)字向右移動(dòng)對(duì)應(yīng)巍峨位數(shù),低位移出(舍棄),高位的空位補(bǔ)符號(hào)位,即正數(shù)補(bǔ)零,負(fù)數(shù)補(bǔ)1.
語(yǔ)法格式:
需要移位的數(shù)字 >> 移位的次數(shù)
例如11 >> 2,則是將數(shù)字11右移2位
計(jì)算過(guò)程:11的二進(jìn)制形式為:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后兩個(gè)數(shù)字移出,因?yàn)樵摂?shù)字是正數(shù),所以在高位補(bǔ)零。則得到的最終結(jié)果是0000 0000 0000 0000 0000 0000 0000 0010.轉(zhuǎn)換為十進(jìn)制是3.數(shù)學(xué)意義:右移一位相當(dāng)于除2,右移n位相當(dāng)于除以2的n次方。
>>>運(yùn)算規(guī)則:按二進(jìn)制形式把所有的數(shù)字向右移動(dòng)對(duì)應(yīng)巍峨位數(shù),低位移出(舍棄),高位的空位補(bǔ)零。對(duì)于正數(shù)來(lái)說(shuō)和帶符號(hào)右移相同,對(duì)于負(fù)數(shù)來(lái)說(shuō)不同。
其他結(jié)構(gòu)和>>相似。
小結(jié)
二進(jìn)制運(yùn)算符,包括位運(yùn)算符和移位運(yùn)算符,使程序員可以在二進(jìn)制基礎(chǔ)上操作數(shù)字,可以更有效的進(jìn)行運(yùn)算,并且可以以二進(jìn)制的形式存儲(chǔ)和轉(zhuǎn)換數(shù)據(jù),是實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議解析以及加密等算法的基礎(chǔ)。
添加回答
舉報(bào)