对一个整数中部分bit取反的问题, 请教速度最快的方法

whz_time 2010-02-24 11:03:52
从整数"dat"的第 "bset" bit 开始, 将其之后的"bcnt"个bit做取反的操作, 如:
dat = 10001000100001110001110000000001, bset = 6, bcnt = 4, 执行之后则为:
dat = 10001011010001110001110000000001
下面的这个是我写的, 想跟各位请教一下, 是否有速度更快的方法.
int data_reverse(int dat, int bset, int bcnt)
{
int uch = ((1<<nbcnt)-1) << (32-bset-nbcnt);
int val = dat;
dat = ~val;
dat &= uch;
dat |= (val & (~uch));
return dat
}
...全文
259 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
whz_time 2010-02-24
  • 打赏
  • 举报
回复
非常感谢2楼的兄弟.
mLee79 2010-02-24
  • 打赏
  • 举报
回复
return dat ^ (((unsigned)~0 >>(sizeof(int)*8-bcnt))<<(sizeof(int)*8-bset-bcnt))
baihacker 2010-02-24
  • 打赏
  • 举报
回复

//我的bset是从最低位开始算的:0-31
#include <stdio.h>

void print_bit(int x, int v)
{
if (v) print_bit(x >> 1, v-1);
printf("%d", x & 1);
}
unsigned int rev(unsigned int value, int start, int cnt)
{
unsigned mask = ((1 << cnt) - 1) << start;
return mask ^value;
}
int main()
{
int value = 0x12345678;
print_bit(value, 32);
puts("");
print_bit(rev(value, 6, 4), 32);
puts("");
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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