写10位数和6位数来缩短?

时间:2012-08-17 20:18:05

标签: c# bit-manipulation bit-shift

我正在编写一个程序,其中一个数字(一个10位数字)存储在16位数字的第一部分中,然后在末尾存储一个6位数字。

如何利用位移来实现我的目标?

3 个答案:

答案 0 :(得分:8)

注意:我正在将“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));

答案 1 :(得分:2)

使用<<左移操作符和|二进制或运算符。

将值放在一起:

short n = (short)(oneNumber << 6 | otherNumber);

(二元运算符将值转换为int,因此您必须将结果转换为short。)

分割值:

int oneNumber = n >> 6;
int otherNumher = n && 0x3F;

答案 2 :(得分:0)

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