我对位掩码和位操作很陌生。你能帮我理解这一点吗?我有三个整数 a、b 和 c,并通过以下操作创建了一个新数字 d:
int a = 1;
int b = 2;
int c = 92;
int d = (a << 14) + (b << 11) + c;
我们如何使用 d 重构 a、b 和 c?
我对位掩码和位操作很陌生。你能帮我理解这一点吗?我有三个整数 a、b 和 c,并通过以下操作创建了一个新数字 d:
int a = 1;
int b = 2;
int c = 92;
int d = (a << 14) + (b << 11) + c;
我们如何使用 d 重构 a、b 和 c?
我不知道你的a
,b
和的范围c
。但是,假设 3 位a
和b
, 11 位 ,c
我们可以这样做:
a = ( d >> 14 ) & 7;
b = ( d >> 11 ) & 7;
c = ( d >> 0 ) & 2047;
更新:
and-mask 的值计算为:(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