青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

C語言里的左移和右移運算

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

int i = 1;
i = i << 2; //把i里的值左移2位

也就是說,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負,那么移位的時候就會出現溢出,例如:

int i = 0x40000000; //16進制的40000000,為2進制的01000000...0000
i = i << 1;

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

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

int i = 1, j = 0x80000000; //設int為32位
i = i << 33; ? // 33 % 32 = 1 左移1位,i變成2
j = j << 33; ? // 33 % 32 = 1 左移1位,j變成0,最高位被丟棄

在用gcc編譯這段程序的時候編譯器會給出一個warning,說左移位數>=類型長度.那么實際上i,j移動的就是1位,也就是33%32后的余數.在gcc下是這個規則,別的編譯器是不是都一樣現在還不清楚.

總之左移就是: 丟棄最高位,0補最低位

再說右移,明白了左移的道理,那么右移就比較好理解了.

右移的概念和左移相反,就是往右邊挪動若干位,運算符是>>.

右移對符號位的處理和左移不同,對于有符號整數來說,比如int類型,右移會保持符號位不變,例如:

int i = 0x80000000;
i = i >> 1; //i的值不會變成0x40000000,而會變成0xc0000000

就是說,符號位向右移動后,正數的話補0,負數補1,也就是匯編語言中的算術右移.同樣當移動的位數超過類型的長度時,會取余數,然后移動余數個位.

總之,在C中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變.實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比循環效率高很多.


例子:
-5>>3=-1
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1111 1111
其結果與 Math.floor((double)-5/(2*2*2)) 完全相同。

-5<<3=-40
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1101 1000
其結果與 -5*2*2*2 完全相同。

5>>3=0
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0000
其結果與 5/(2*2*2) 完全相同。

5<<3=40
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0010 1000
其結果與 5*2*2*2 完全相同。

-5>>>3=536870911
1111 1111 1111 1111 1111 1111 1111 1011
0001 1111 1111 1111 1111 1111 1111 1111

無論正數、負數,它們的右移、左移、無符號右移 32 位都是其本身,比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。
一個有趣的現象是,把 1 左移 31 位再右移 31 位,其結果為 -1。
0000 0000 0000 0000 0000 0000 0000 0001
1000 0000 0000 0000 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111 1111 1111

對于10進制的數字,左移一位就是在末尾加上一個0,數值變大10倍。
同理,對于二進制數字,左移一位是在末尾加上一個0,數值變大2被。
所以 x << 3,x就變大 2^3 倍,就是 8*x
右移同理

一般情況下你要乘或者是除以數字是2的次方的話都可以用的
執行速度快

posted on 2006-10-19 14:15 楊粼波 閱讀(9225) 評論(1)  編輯 收藏 引用 所屬分類: C++

評論

# re: C語言里的左移和右移運算 2015-04-04 22:28 是大法官

上一個是嘗試了一下,沒想到還真能評論,找了很多關于位移運算的,這個是比較詳細全面的,建議大家仔細看看  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜天堂精品久久久久| 国内成+人亚洲| 亚洲精品欧美在线| 久久精品一区二区国产| 午夜精品久久99蜜桃的功能介绍| 国产精品国产三级国产普通话三级 | 老司机精品导航| 亚洲国产精品va| 久久欧美中文字幕| 国产麻豆精品theporn| 欧美伊人久久久久久久久影院 | 亚洲国产欧美在线人成| 欧美肥婆bbw| 欧美高清你懂得| 99re6热只有精品免费观看| 久久免费国产| 美女视频黄a大片欧美| 亚洲精品欧美一区二区三区| 蜜桃精品一区二区三区| 男同欧美伦乱| 在线视频日韩精品| 亚洲一区免费视频| 狠狠色丁香婷综合久久| 欧美国产日韩xxxxx| 欧美精品一区二区三区高清aⅴ| 亚洲一区二区三区精品视频 | 亚洲区在线播放| 亚洲精选91| 国产欧美日韩另类视频免费观看 | 欧美日韩在线一区| 欧美一级艳片视频免费观看| 欧美一区二区三区免费大片| 一区二区三区欧美亚洲| 国产一区二区三区免费观看| 亚洲国产成人精品久久久国产成人一区 | 一区二区三区蜜桃网| 国产精品资源| 老司机免费视频一区二区三区| 免费看的黄色欧美网站| 亚洲欧美网站| 欧美一区二区精品在线| 亚洲日本va午夜在线电影| 亚洲在线观看| 日韩一二在线观看| 久久www成人_看片免费不卡| 亚洲国产高清一区| 亚洲小说欧美另类婷婷| 亚洲人成网站精品片在线观看| 亚洲天堂激情| 亚洲人www| 宅男精品导航| 亚洲精选国产| 久久人体大胆视频| 欧美一区在线直播| 欧美日韩一区二区三区免费| 午夜在线视频观看日韩17c| 蜜桃伊人久久| 久久久久久欧美| 国产精品久久久一区二区| 久久一区二区三区国产精品 | 久久se精品一区二区| 亚洲欧美国产视频| 欧美日韩三级| 久久野战av| 国产欧美日韩亚洲精品| 日韩一区二区高清| 一区二区三区蜜桃网| 免费亚洲一区二区| 欧美福利一区二区| 亚洲电影欧美电影有声小说| 午夜精品短视频| 欧美怡红院视频| 欧美成人免费va影院高清| 国产一区视频观看| 欧美一区二区在线看| 欧美有码在线视频| 国产精品亚洲综合| 亚洲一区二区日本| 性做久久久久久免费观看欧美| 欧美色欧美亚洲另类七区| 久久综合九九| **网站欧美大片在线观看| 久久亚洲影院| 欧美大片18| aa级大片欧美三级| 欧美日韩在线观看一区二区三区| 亚洲第一福利社区| 亚洲日本乱码在线观看| 欧美激情中文不卡| 亚洲韩国青草视频| 亚洲黄色一区| 亚洲欧美大片| 在线播放日韩欧美| 欧美日韩精品在线| 久久国产乱子精品免费女| 91久久久一线二线三线品牌| 亚洲欧美精品suv| 亚洲国产精品久久久久婷婷老年| 欧美日韩成人在线观看| 久久精品中文| 国产精品99久久久久久人| 久久综合成人精品亚洲另类欧美| 99精品久久久| 精品成人乱色一区二区| 欧美先锋影音| 免费观看日韩| 久久国产99| 亚洲一二区在线| 亚洲经典一区| 免费欧美高清视频| 欧美一区二区黄| 亚洲色诱最新| 亚洲人久久久| 亚洲国产精品一区二区www| 欧美激情日韩| 久久久欧美精品sm网站| 亚洲影视九九影院在线观看| 亚洲精品一区在线观看香蕉| 韩日欧美一区二区三区| 国产精品日韩专区| 欧美日韩mp4| 欧美国产日本韩| 免费成人小视频| 老色鬼精品视频在线观看播放| 午夜国产精品影院在线观看| 亚洲性夜色噜噜噜7777| 日韩午夜免费| 一区二区成人精品 | 久久综合国产精品| 久久精品女人的天堂av| 亚洲女ⅴideoshd黑人| 亚洲色图在线视频| 一区二区三区精品视频| 日韩一级黄色大片| 日韩视频国产视频| 99re6热只有精品免费观看| 亚洲日本视频| 日韩午夜中文字幕| 制服丝袜激情欧洲亚洲| 亚洲视频免费| 亚洲一区中文字幕在线观看| 亚洲小少妇裸体bbw| 亚洲视频一区二区| 亚洲一区激情| 欧美国产一区二区| 欧美激情精品久久久六区热门| 免费观看日韩| 欧美天堂亚洲电影院在线播放| 欧美三级网址| 国产九九精品视频| 国产一区二区三区免费观看| 永久域名在线精品| 亚洲免费观看高清完整版在线观看熊| 最新国产成人av网站网址麻豆| 亚洲美女在线看| 亚洲在线观看视频网站| 久久精品导航| 欧美成人亚洲成人| 日韩一级成人av| 亚洲欧美久久久| 久久最新视频| 欧美日韩在线观看视频| 国产麻豆日韩| 亚洲黄色大片| 午夜精品国产| 久久国产黑丝| 精品成人一区二区三区| 欧美视频三区在线播放| 国产精品女人网站| 精品999久久久| 99精品欧美一区| 欧美在线一级视频| 欧美激情在线免费观看| 中国av一区| 久久躁日日躁aaaaxxxx| 国产精品国产三级欧美二区 | 国产视频丨精品|在线观看| 在线欧美日韩精品| 亚洲男女毛片无遮挡| 欧美jizzhd精品欧美巨大免费| 一区二区三区高清不卡| 久久久另类综合| 国产精品v一区二区三区 | 欧美精品自拍偷拍动漫精品| 国产欧美综合在线| 一本色道久久加勒比88综合| 久久精品国产91精品亚洲| 亚洲经典在线看| 久久er精品视频| 国产精品久久国产精品99gif| 在线观看日韩欧美| 亚洲欧美中日韩| 亚洲激情六月丁香| 久久久久久久久伊人| 国产精品久久久久一区二区| 亚洲久久一区| 欧美激情一区| 看欧美日韩国产| 韩国精品在线观看| 久久成人综合网|