位運算之左移右移運算之詳解
先看如下一段左移右移的代碼及其結果:
 代碼
      
        代碼
      
      
          
            
              #include 
            
            
              "
            
            
              stdio.h
            
            
              "
            
            
            
            
              char
            
            
               leftshift(
            
            
              char
            
            
               i, 
            
            
              int
            
            
               n) { 
            
            
              if
            
            
              (n 
            
            
              <
            
            
            
            
              0
            
            
              ) 
            
            
              return
            
            
            
            
              -
            
            
              1
            
            
              ; 
            
            
              return
            
            
               i
            
            
              <<
            
            
              n; } 
            
            
              char
            
            
               rightshift(
            
            
              char
            
            
               i, 
            
            
              int
            
            
               n) { 
            
            
              if
            
            
              (n 
            
            
              <
            
            
            
            
              0
            
            
              ) 
            
            
              return
            
            
            
            
              -
            
            
              1
            
            
              ; 
            
            
              return
            
            
               i
            
            
              >>
            
            
              n; } 
            
            
              int
            
            
               main() { 
            
            
              //
            
            
              leftshift
            
            
            
            
            
            
              char
            
            
               a1 
            
            
              =
            
            
            
            
              127
            
            
              ; 
            
            
              char
            
            
               a2 
            
            
              =
            
            
            
            
              -
            
            
              1
            
            
              ; 
            
            
              for
            
            
              (
            
            
              int
            
            
               i 
            
            
              =
            
            
            
            
              1
            
            
              ; i 
            
            
              <=
            
            
            
            
              8
            
            
              ; i
            
            
              ++
            
            
              ) printf(
            
            
              "
            
            
              %d<<%d = %d;\n
            
            
              "
            
            
              , a1, i, leftshift(a1,i)); 
            
            
              for
            
            
              (i 
            
            
              =
            
            
            
            
              1
            
            
              ; i 
            
            
              <=
            
            
            
            
              8
            
            
              ; i
            
            
              ++
            
            
              ) printf(
            
            
              "
            
            
              %d<<%d = %d;\n
            
            
              "
            
            
              , a2, i, leftshift(a2,i)); 
            
            
              //
            
            
              rightshift
            
            
            
            
               a1 
            
            
              =
            
            
            
            
              127
            
            
              ; a2 
            
            
              =
            
            
            
            
              -
            
            
              128
            
            
              ; 
            
            
              for
            
            
              (i 
            
            
              =
            
            
            
            
              1
            
            
              ; i 
            
            
              <=
            
            
            
            
              8
            
            
              ; i
            
            
              ++
            
            
              ) printf(
            
            
              "
            
            
              %d>>%d = %d;\n
            
            
              "
            
            
              , a1, i, rightshift(a1,i)); 
            
            
              for
            
            
              (i 
            
            
              =
            
            
            
            
              1
            
            
              ; i 
            
            
              <=
            
            
            
            
              8
            
            
              ; i
            
            
              ++
            
            
              ) printf(
            
            
              "
            
            
              %d>>%d = %d;\n
            
            
              "
            
            
              , a2, i, rightshift(a2,i)); 
            
            
              return
            
            
            
            
              0
            
            
              ; }
            
          
        
      結果為:
 結果
      結果 
  
      
          
            
              127
            
            
              <<
            
            
              1
            
            
            
            
              =
            
            
            
            
              -
            
            
              2
            
            
              ; 
            
            
              127
            
            
              <<
            
            
              2
            
            
            
            
              =
            
            
            
            
              -
            
            
              4
            
            
              ; 
            
            
              127
            
            
              <<
            
            
              3
            
            
            
            
              =
            
            
            
            
              -
            
            
              8
            
            
              ; 
            
            
              127
            
            
              <<
            
            
              4
            
            
            
            
              =
            
            
            
            
              -
            
            
              16
            
            
              ; 
            
            
              127
            
            
              <<
            
            
              5
            
            
            
            
              =
            
            
            
            
              -
            
            
              32
            
            
              ; 
            
            
              127
            
            
              <<
            
            
              6
            
            
            
            
              =
            
            
            
            
              -
            
            
              64
            
            
              ; 
            
            
              127
            
            
              <<
            
            
              7
            
            
            
            
              =
            
            
            
            
              -
            
            
              128
            
            
              ; 
            
            
              127
            
            
              <<
            
            
              8
            
            
            
            
              =
            
            
            
            
              0
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              1
            
            
            
            
              =
            
            
            
            
              -
            
            
              2
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              2
            
            
            
            
              =
            
            
            
            
              -
            
            
              4
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              3
            
            
            
            
              =
            
            
            
            
              -
            
            
              8
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              4
            
            
            
            
              =
            
            
            
            
              -
            
            
              16
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              5
            
            
            
            
              =
            
            
            
            
              -
            
            
              32
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              6
            
            
            
            
              =
            
            
            
            
              -
            
            
              64
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              7
            
            
            
            
              =
            
            
            
            
              -
            
            
              128
            
            
              ; 
            
            
              -
            
            
              1
            
            
              <<
            
            
              8
            
            
            
            
              =
            
            
            
            
              0
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              1
            
            
            
            
              =
            
            
            
            
              63
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              2
            
            
            
            
              =
            
            
            
            
              31
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              3
            
            
            
            
              =
            
            
            
            
              15
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              4
            
            
            
            
              =
            
            
            
            
              7
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              5
            
            
            
            
              =
            
            
            
            
              3
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              6
            
            
            
            
              =
            
            
            
            
              1
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              7
            
            
            
            
              =
            
            
            
            
              0
            
            
              ; 
            
            
              127
            
            
              >>
            
            
              8
            
            
            
            
              =
            
            
            
            
              0
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              1
            
            
            
            
              =
            
            
            
            
              -
            
            
              64
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              2
            
            
            
            
              =
            
            
            
            
              -
            
            
              32
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              3
            
            
            
            
              =
            
            
            
            
              -
            
            
              16
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              4
            
            
            
            
              =
            
            
            
            
              -
            
            
              8
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              5
            
            
            
            
              =
            
            
            
            
              -
            
            
              4
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              6
            
            
            
            
              =
            
            
            
            
              -
            
            
              2
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              7
            
            
            
            
              =
            
            
            
            
              -
            
            
              1
            
            
              ; 
            
            
              -
            
            
              128
            
            
              >>
            
            
              8
            
            
            
            
              =
            
            
            
            
              -
            
            
              1
            
            
              ;
            
          
        
      
左邊空出的位用0或者1填補。正數用0填補,負數用1填補。注:不同的環境填補方式可能不同;
低位右移溢出則舍棄該位。
1、127的補碼:0111 1111
右移一位: 0011 1111 -> 原碼同補碼一樣 對應十進制:63
右移二位: 0001 1111 -> 原碼同補碼一樣 對應十進制:31
右移三位: 0000 1111 -> 原碼同補碼一樣 對應十進制:15
右移四位: 0000 0111 -> 原碼同補碼一樣 對應十進制:7
右移五位: 0000 0011 -> 原碼同補碼一樣 對應十進制:3
右移六位: 0000 0001 -> 原碼同補碼一樣 對應十進制:1
右移七位: 0000 0000 -> 原碼同補碼一樣 對應十進制:0
右移八位: 0000 0000 -> 原碼同補碼一樣 對應十進制:0
2、-128的補碼:1000 0000
右移一位: 1100 0000 -> 這個補碼對應的原碼為:1100 0000 對應十進制:-64
右移二位: 1110 0000 -> 這個補碼對應的原碼為:1010 0000 對應十進制:-32
右移三位: 1111 0000 -> 這個補碼對應的原碼為:1001 0000 對應十進制:-16
右移四位: 1111 1000 -> 這個補碼對應的原碼為:1000 1000 對應十進制:-8
右移五位: 1111 1100 -> 這個補碼對應的原碼為:1000 0100 對應十進制:-4
右移六位: 1111 1110 -> 這個補碼對應的原碼為:1000 0010 對應十進制:-2
右移七位: 1111 1111 -> 這個補碼對應的原碼為:1000 0001 對應十進制:-1
右移八位: 1111 1111 -> 這個補碼對應的原碼為:1000 0001 對應十進制:-1
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
 
					微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
 
					

