//编写一个函数getbits,从一个16位的单元中取出某几位
//(即该几位保留原值,其余位为0)例:getbits(173253,5,8)
//表示对八进制173253这个数取出它从左面起第5位到第8位
//结果为:6(8进制)#include <stdio.h>
short  getbits(short value, int n1, int n2) //在VC中16位用short,对吗?
{
short  z;
z = ~0;        //全1
z = (z >> n1) & (z << (16-n2));
z = value & z;
z = z >> (16-n2);
return z;
}void main()
{
short  value;
int  n1, n2;
printf("请输入一个8进制数:");
scanf("%o", &value);
printf("\n请输入起始位n1,结束位n2:");
scanf("%d%d", &n1, &n2);
printf("\n结果:%o\n", getbits(value, n1, n2));
}
可我的结果却是37777777766为什么?

解决方案 »

  1.   

    #include <stdio.h>
    short  getbits(unsigned short value, int n1, int n2) //在VC中16位用short,对吗?
    {
    unsigned short  z=0xffff,t,i;
    if((n1>n2) || (n1<0) ||(n2>15)) return 0; //应该对输入参数合法性做出检查
    z = (z << n1) & (z >> (15-n2));
    z = value & z;
    z = z >> n1; //错了哦,
    return z;
    }void main()
    {
    short  value;
    int  n1, n2;
    printf("请输入一个数字:");
    scanf("%d", &value);
    printf("\n请输入起始位n1(n2>n>=0):");
    scanf("%d", &n1);
    printf("\n请输入结束位(15>=n2>n1):");
    scanf("%d", &n2);
    printf("\n结果:%d\n", getbits(value, n1, n2));
    }
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]