首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否将10位数字和6位数字写入short?

是否将10位数字和6位数字写入short?
EN

Stack Overflow用户
提问于 2012-08-18 04:18:05
回答 3查看 742关注 0票数 2

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

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

EN

回答 3

Stack Overflow用户

发布于 2012-08-18 04:20:19

注意:我将“16位数的第一部分”解释为"10个最低有效位“--因为位数学通常从右开始倒数。

代码语言:javascript
运行
复制
short x = (short)(value & 1023); // the first 10 bits
short y = (short)((value >> 10) & 63); // the last 6 bits

并进行重新组合:

代码语言:javascript
运行
复制
value = (short)(x | (y << 10));
票数 8
EN

Stack Overflow用户

发布于 2012-08-18 04:21:28

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

要将值放在一起,请执行以下操作:

代码语言:javascript
运行
复制
short n = (short)(oneNumber << 6 | otherNumber);

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

拆分值的步骤:

代码语言:javascript
运行
复制
int oneNumber = n >> 6;
int otherNumher = n && 0x3F;
票数 2
EN

Stack Overflow用户

发布于 2012-08-18 04:24:50

代码语言:javascript
运行
复制
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.

数学上:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12012634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档