位移運算
<<運算**
a<
定義一些常量可能會用到<<運算。你可以方便的用1<<16 -1 來表示65535(unsingned int 最大值16位系統(tǒng))。很多算法和數(shù)據(jù)結(jié)構(gòu)要求數(shù)據(jù)模塊必須是2的冪,此時就可以用<<來定義MAX_N等常量。
移位運算符有雙目移位運算符
在c++中,移位運算符有雙目移位運算符:<<(左移)和>>(右移)。移位運算符組成的表達式也屬于算術(shù)表達式,其值為算術(shù)值。左移運算是將一個二進制位的操作數(shù)按指定移動的位數(shù)向左移動,移出位被丟棄,右邊移出的空位一律補0。右移運算是將一個二進制位的操作數(shù)按指定移動的位數(shù)向右移動,移出位被丟棄,左邊移出的空位一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數(shù)的機器中,正數(shù)的符號位為0,負數(shù)的符號位為1。
在移位運算時,byte、short和char類型移位后的結(jié)果會變成int類型,對于byte、short、char和int進行移位時,編譯器未做任何優(yōu)化的情況下(優(yōu)化后不可預期),規(guī)定實際移動 的次數(shù)是移動次數(shù)和32的余數(shù),也就是移位33次和移位1次得到的結(jié)果相同。移動long型的數(shù)值時,規(guī)定實際移動的次數(shù)是移動次數(shù)和64的余數(shù),也就是 移動66次和移動2次得到的結(jié)果相同。