右移運算符

右移運算符

運算符号
右移運算符,移位運算符的一種:程序設計中,位操作運算符的一種。在c++中,移位運算符有雙目移位運算符:>(右移)。移位運算符組成的表達式也屬于算術表達式,其值為算術值。左移運算是将一個二進制位的操作數按指定移動的位數向左移位,移出位被丢棄,右邊的空位一律補0。右移運算是将一個二進制位的操作數按指定移動的位數向右移動,移出位被丢棄,左邊移出的空位或者一律補0,或者補符号位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符号位為0,負數的符号位為1。(均由機器來定)分類:移位運算包含“邏輯移位”(logicalshift)和“算術移位”(arithmeticshift)。邏輯移位:移出去的位丢棄,空缺位(vacantbit)用0填充。算術移位:移出去的位丢棄,空缺位(vacantbit)用“符号位”來填充,所以一般用在右移運算中。[1]
    中文名:右移運算符 外文名: 别名: 含義:移位運算符的一種 用途:程序設計 運算符号:<<、>>

基本介紹

移位運算符的一種:

C語言中位移位運算符

位移位運算符

位移位運算符是将數據看成二進制數,對其進行向左或向右移動若幹位的運算。位移位運算符分為左移和右移兩種,均為雙目運算符。第一運算對象是移位對象,第二個運算對象是所移的二進制位數。

位移位運算符的運算對象、運算規則與結果、結合性所示。

移位時,移出的位數全部丢棄,移出的空位補入的數與左移還是右移有關。如果是左移,則規定補入的數全部是0;如果是右移,還與被移位的數據是否帶符号有關。若是不帶符号數,則補入的數全部為0;若是帶符号數,則補入的數全部等于原數的最左端位上的原數(即原符号位)。具體移位規則如下所示。

位移位運算符的優先級如下:

算術運算符優先于位移位運算符優先于關系運算符

位移位運算符是同級别的,結合性是自左向右

舉例

先說左移,左移就是把一個數的所有位都向左移動若幹位,在C中用<<運算符.例如>運算符.例如

也就是說,1的2進制是000...0001(這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0),左移2位之後變成000...0100,也就是10進制的4,所以說左移1位相當于乘以2,那麼左移n位就是乘以2的n次方了(有符号數不完全适用,因為左移有可能導緻符号變化,下面解釋原因)

需要注意的一個問題是int類型最左端的符号位和移位移出去的情況.我們知道,int是有符号的整形數,最左端的1位是符号位,即0正1負,那麼移位的時候就會出現溢出,例如:

那麼,i在左移1位之後就會變成0x80000000,也就是2進制的100000...0000,符号位被置1,其他位全是0,變成了int類型所能表示的最小值,32位的int這個值是-2147483648,溢出.如果再接着把i左移1位會出現什麼情況呢?在C語言中采用了丢棄最高位的處理方法,丢棄了1之後,i的值變成了0.

左移裡一個比較特殊的情況是當左移的位數超過該數值類型的最大位數時,編譯器會用左移的位數去模類型的最大位數,然後按餘數進行移位,如

上一篇:氟化鈉

下一篇:中藥顆粒劑

相關詞條

相關搜索

其它詞條