0

ビット操作の観点から、C# コードの次の行を理解する方法

a = 15 & ( a ^ (b << 3));

次のコード セグメントのビット操作、特に宣言uint8_t auint8_t b

  int  decode(const  void*  raw_in,  void*  raw_out,  uint32_t  password,  size_t  len) 
  { 
        ## some code here ##
        const  uint8_t*  in  =  (const  uint8_t*)raw_in; 
        uint32_t  seed  =  password  ^  0x48879c19u; 
        for  (size_t  i  =  0  ;  i  <  len;  ++i)  { 
                uint8_t a = (in[i] << 4) ^ seed;
                 uint8_t b = (((uint32_t)in[i]) << 7 ^ seed) >> 11;

  .......
4

3 に答える 3

0

b は 8 ビット値です

b << 3 は、値が 3 バイト左にシフトしたことです。

次に、これを a と排他的に OR します。対応するビットが異なる場合は 1 になり、同じ場合は 0 になります。

次に、この値は 00001111 である 15 とビットごとに AND 演算されるため、最下位 4 ビットは同じままで、最上位 4 ビットはゼロになります。

于 2013-08-09T10:23:09.337 に答える