当前位置: 代码迷 >> C语言 >> 一个取16位数中的某几位的函数
  详细解决方案

一个取16位数中的某几位的函数

热度:247   发布时间:2006-06-17 00:21:27.0
一个取16位数中的某几位的函数
这是一个取16位数中的某几位的函数
main()
{getbits(unsigned value,int n1,int n2);
unsigned int a;
int n1,n2;
printf("input an number");
scanf("%o",&a);
prntf("input n1 and n2");
scanf("%d%d",&n1,&n2);
prntf("output:%o\n",getbits(a,n1-1,n2));
}

getbits(unsigned value,int n1,int n2)
{unsigned int z;
z=~0;
z=(z>>n1&(z<<(16-n2));
z=value&z;
z=z>>(16-n2);
return(z);
}
在编译时不能通过,不知哪里出了错误,请给予指教……

[此贴子已经被作者于2006-6-17 0:24:20编辑过]

搜索更多相关的解决方案: 函数  位数  

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-16 16:26:53
han2y

来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
  得分:0 
错误找到了:应该为如下:(红色代码是改动的)
main()
{
unsigned int a;
int n1,n2;
printf("input an number");
scanf("%o",&a);
printf("input n1 and n2");
scanf("%d%d",&n1,&n2);
printf("output:%o\n",getbits(a,n1-1,n2));
}
getbits(unsigned value,int n1,int n2)
{unsigned int z,z1,z2;
z=~0;
z1=z>>n1;
z2=z<<(16-n2);
z=z1&z2;
z=value&z;
z=z>>(16-n2);
return(z);
}
原来是:z=(z>>n1)&(z<<(16-n2); (z>>n1)和(z<<(16-n2)是同时进行,所以z不可能既向左移动又向右移动

[此贴子已经被作者于2006-6-17 0:43:09编辑过]


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-16 16:48:06
feng1256

等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
  得分:0 

注意风格!别写这么乱!

unsigned int getbits(unsigned int value,int n1,int n2) 应该这样声明
尽量把函数声明定义等,都放在主函数外,增加通用性
而且不管TC系列的要求如何,应该加上头文件,基于一个良好的习惯
关于这个程序,我没仔细看。不过要取其中某几位,直接操作这个数就行,不需要写函数

还有换换你的头像,虽然有名,但这张看起来实在.......


----------------解决方案--------------------------------------------------------
按照4楼的说法,如果i=3;j=i++*++i+i--*--i;求j的值;
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-16 17:10:40
穆扬

等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
  得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-16 17:14:51
han2y

来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
  得分:0 

7楼说的有道理,是我错了,但是我第一次的程序无法运行,但改动后怎么又能够运行了呢?是哪里出了错误吗?


----------------解决方案--------------------------------------------------------
在tc下是18


----------------解决方案--------------------------------------------------------
  相关解决方案