使用位掩码重建整数

Reconstructing integers using bit mask

本文关键字:重建 整数 掩码      更新时间:2023-10-16

我对位屏蔽和位操作很陌生。你能帮我理解一下吗。我有三个整数a、b和c,我用以下操作创建了一个新的数字d:

int a = 1;
int b = 2;
int c = 92;
int d = (a << 14) + (b << 11) + c;

我们如何使用d重建a、b和c?

我不知道您的abc的范围。然而,假设ab有3个比特,c有11个比特,我们可以做到:

a = ( d >> 14 ) & 7;
b = ( d >> 11 ) & 7;
c = ( d >>  0 ) & 2047;

更新:

和掩码的值计算为:(2^NumberOfBits)-1

a is 0000 0000 0000 0000 0000 0000 0000 0001
b is 0000 0000 0000 0000 0000 0000 0000 0010
c is 0000 0000 0000 0000 0000 0000 0101 1100
a<<14 is 0000 0000 0000 0000 0100 0000 0000 0000
b<<11 is 0000 0000 0000 0000 0001 0000 0000 0000
c     is 0000 0000 0000 0000 0000 0000 0101 1100
d     is 0000 0000 0000 0000 0101 0000 0101 1100
                              ^ ^      {        }
                              a b          c       

  So a = d>>14             
     b = d>>11 & 7        
     c = d>>0  & 2047     
  By the way ,you should make sure the b <= 7 and c <= 2047