位操作

combobox2013 2013-07-19 03:35:27
有两个数字,第一数字是5个字节(用byte数组保存), 第2个数字用16位的short保存

取第一个数字里的某些位(一共取16位)看,对第二个数字赋值,如何做?


比如我要去除第一个数字的1,2个bit位,对第二个数字的,第0,1位赋值,如何做?
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-07-23
  • 打赏
  • 举报
回复

int main()
{
byte a[5];
unsigned short b;
//输入 a
//.....

int srcbits[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18};
int dstbits[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18};

int i,srcbyte,cursrcbit,curdstbit;
for(b=0,i=0;i<16;i++)
{ 

  srcbyte=srcbits[i] /8;
  cursrcbit =srcbits[i] %8;
  curdstbit = dstbits[i];  
  b|=( (unsigend short) ((a[srcbyte] >> cursrcbit) &1) ) << curdstbit;
}
return 0;
} 
//单独设置,short或者unsigned short 的某一位,置1操作
void SetBit(unsigned short *dst,byte src[],int dstBit,int srcBit){
      *dst |= (unsigned short)( (a[srcBit/8] >> (srcBit %8))&1)<<dstBits;
}

void ClrBit(unsigned short *dst,byte src[],int dstBit,int srcBit){
      *dst &= ~((unsigned short)( (a[srcBit/8] >> (srcBit %8))&1)<<dstBits);
}
图灵狗 2013-07-19
  • 打赏
  • 举报
回复

b &= ~3;
b |= (a[0] >> 1) & 3;
引用 3 楼 combobox2013 的回复:
[quote=引用 2 楼 turingo 的回复:]

unsigned char a[5];
unsigned short b;
...
b = a[0] | (a[1] << 8);
不对额, 我说的是第一1个字节的第1位,第2位 ,取出这2位来赋值给 b的 第0为何第1位。 [/quote]
combobox2013 2013-07-19
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:

unsigned char a[5];
unsigned short b;
...
b = a[0] | (a[1] << 8);
不对额, 我说的是第一1个字节的第1位,第2位 ,取出这2位来赋值给 b的 第0为何第1位。
图灵狗 2013-07-19
  • 打赏
  • 举报
回复

unsigned char a[5];
unsigned short b;
...
b = a[0] | (a[1] << 8);
combobox2013 2013-07-19
  • 打赏
  • 举报
回复

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧