1 つの数値 (10 ビットの数値) が 16 ビットの数値の最初の部分に格納され、最後に 6 ビットの数値が格納されるプログラムを作成しています。
目的を達成するためにビットシフトを利用するにはどうすればよいですか?
1 つの数値 (10 ビットの数値) が 16 ビットの数値の最初の部分に格納され、最後に 6 ビットの数値が格納されるプログラムを作成しています。
目的を達成するためにビットシフトを利用するにはどうすればよいですか?
注:私は「16ビット数の最初の部分」を「最下位10ビット」と解釈しています。ビット演算は通常、右から逆方向にカウントされるためです。
short x = (short)(value & 1023); // the first 10 bits
short y = (short)((value >> 10) & 63); // the last 6 bits
そして再結合する:
value = (short)(x | (y << 10));
<<
左シフト演算子、および|
バイナリまたは演算子を使用します。
値をまとめるには:
short n = (short)(oneNumber << 6 | otherNumber);
(値はint
二項演算子によってキャストされるため、結果をにキャストする必要がありますshort
。)
値を分割するには:
int oneNumber = n >> 6;
int otherNumher = n && 0x3F;
ushort result=0;
ushort a=100;
ushort b= 43;
result=((result|(a<<6))|b&63)
//shift a by 6 bits to empty 6 bits at end,and then OR it with result.Strip from b, any bit ahead of 6 th place and OR it with result.
数学的に:-
0000000000000000 = result
0000000001100100 = a
0000000000101011 = b
0001100100000000 = (a<<6)
0000000000000000|0001100100000000 = (result|(a<<6))=0001100100000000
0000000000101011|0000000000111111 = b&63 =0000000000101011
0001100100000000|0000000000101011 = ((result|(a<<6))|b&63)=0001100100101011
result=6443