C 언어의 자리 이동

       ,  n     2 n  ,  n     2 n  。      :

C           
2006-09-30 13:52

    ,                    , 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,             .                ,    ,        .

       10100110 >>5(     8 ),       11111101

  , C ,     /    (      ),       ,        .             /       /   ,
           . 
x>>1;   //    x /= 2
x<<1;   // x *= 2
x>>2;   // x /= 4
x<<2;   // x *= 4
x>>3;   // x /= 8
x<<3;   // x *= 8

좋은 웹페이지 즐겨찾기