关于移位的问题

zhipengzhou 2011-11-19 11:54:56
编写一个函数getbits,从一个 16 位的 单元中取出某几位(即该几位保留原值,其余
位为 0)。函数调用形式为:getbits(value,n1,n2)其中value 为该 16 位单元中的数据值,n1 为
欲取出的起始位,n2 为欲取出的结束位。
#include "stdio.h"
main()
{
unsigned int getbits(unsigned int,int,int);
unsigned int a;
int n1,n2;
printf("input no.:\n");
scanf("%d",&a);
printf("input n1,n2:\n");
scanf("%d,%d",&n1,&n2);
printf("result:%d",getbits(a,n1-1,n2));
}
unsigned int getbits(unsigned int value,int n1,int n2)
{
unsigned int z;
z=value<<(16-n2);
z=z>>(16-n2+n1);
return(z);
}

求教下:为什么输入a=121,n1=2,n2=5 输出结果是60 而不是12?
另外把上述16改成32则可以得到12,是不是有进位位或缓存位这种说法?
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengxujun 2011-11-19
  • 打赏
  • 举报
回复
每天灌水得10分。
小笨同学 2011-11-19
  • 打赏
  • 举报
回复
因为你的机器int为32位,如果int为16位的话,代码可正常运行,测试如下

#include <stdio.h>
#include <inttypes.h>
int main(void)
{
uint16_t getbits(uint16_t,uint16_t,uint16_t);
uint16_t a;
uint16_t n1,n2;
printf("input no.:\n");
scanf("%hd",&a);
printf("input n1,n2:\n");
scanf("%hd,%hd",&n1,&n2);
printf("result:%hd",getbits(a,n1-1,n2));
return 0;
}
uint16_t getbits(uint16_t value,uint16_t n1,uint16_t n2)
{
uint16_t z;
z=value<<(16-n2);
z=z>>(16-n2+n1);
return(z);
}

121
2,5
结果为12
zichen0422 2011-11-19
  • 打赏
  • 举报
回复
把unsigned int 改成是16位的个!

69,371

社区成员

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

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