次の形式の整数から4つの整数を取得する必要があります
int1 14 bits
int2 14 bits
int3 3 bits
int4 1 bit
int から個々のビットを読み取るための記事をたくさん見つけましたが、単一の整数から複数の値を読み取る方法については何も見つからないので、助けていただければ幸いです!
次の形式の整数から4つの整数を取得する必要があります
int1 14 bits
int2 14 bits
int3 3 bits
int4 1 bit
int から個々のビットを読み取るための記事をたくさん見つけましたが、単一の整数から複数の値を読み取る方法については何も見つからないので、助けていただければ幸いです!
左から右だと仮定すると
int int1 = x >> 18;
int int2 = (x >> 4) & 0x3fff;
int int3 = (x >> 1) & 7;
int int4 = x & 1;
したがって、32 ビットの int が次のようにビットごとに配置され、ターゲット変数が X、Y、Z、および W であると仮定しましょう。
31 0 # bit index
XXXXXXXXXXXXXX YYYYYYYYYYYYYY ZZZ W # arrangement
......14...... ......14...... .3. 1 # bits per variable
............18 .............4 ..1 0 # required right-shift
を取得するにはX
、整数を 18 ビット右にシフトし、((1<<14)-1)
(つまり 0x3FFF) などでマスクします。
x = (i >> 18) & 0x3FFF
y = (i >> 4) & 0x3FFF
z = (i >> 1) & 7 # ((1<<3)-1) = 7
w = i & 1
これを取得するには、bitwise and を使用できます。
int source = somevalue;
int int1 = 16383&somevalue;
int int2 = 268419072&somevalue;
int int3 = 1879048192&somevalue;