| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 226 人关注过本帖
标题:【 求助 】关于位运算中的getbits
收藏  订阅  推荐  打印 
灵感唯一
Rank: 1
等级:新手上路
帖子:7
积分:182
注册:2008-7-8
【 求助 】关于位运算中的getbits

#include<stdio.h>
unsigned getbits(unsigned value,int n1,int n2)
{
    return (value >> n1) & ~( ~0 << (n2 - n1 + 1) );
}
void main()
{
    unsigned a;
    int n1,n2;
    printf("input an octal number:");
    scanf("%o",&a);
    printf("input n1,n2:");
    scanf("%d,%d",&n1,&n2);
    printf("result:%o\n",getbits(a,n1,n2));
    
}

我写的这个是从右边的位数开始的,我怎么都弄不出从左边位数开始的,还有我用的是VC++写c,我感觉这个跟VC有点关系,
getbits(101675,5,8)   返回 15;
getbits(101675,7,11)   返回 7;

我需要的结果是当getbits(101675,5,8)时,返回 7

我弄了个从左边位数开始的
#include<stdio.h>
unsigned short getbits(unsigned short value,int n1,int n2)
{
    return ( value << ( n1 - 1 ) & ~ ( ~ 0 >> (n2 - n1 + 1) ) ) >> ( 15 - n2 + n1);
}
void main()
{
    unsigned short a;
    int n1,n2;
    printf("input an octal number:");
    scanf("%o",&a);
    printf("input n1,n2:");
    scanf("%d,%d",&n1,&n2);
    printf("result:%o\n",getbits(a,n1,n2));
    
}

结果还是
getbits(101675,5,8)   返回 15;
getbits(101675,7,11)   返回 7;
当把main中最后个printf改成getbits(a,15-n1,15-n2);

结果还是
getbits(101675,5,8)   返回 15;
getbits(101675,7,11)   返回 7;

真的无语了,那位大虾帮帮忙,先谢过!
搜索更多相关主题的帖子: getbits  int  运算  unsigned  
2008-7-10 17:13
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1377
积分:14374
注册:2007-6-19

// 从左边位数开始的 (第一位为0)
// unsigned short 即 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
unsigned short getbits(unsigned short value, int n1,int n2)
{

    if(n1 < 0 || n2 < 0 || n1 == 16 || n2 == 16)
    {
        printf("Error!\a");
    }
    else if(n1 > n2)
    {
        n1 += n2;
        n2 = n1 - n2;
        n1 -= n2;
    }
   
    n1 %= 16;
    n2 %= 16;

    return (value >> (15 - n2)) & ~(~0 << (n2 - n1 + 1));
        // (value >> (16 - n2 - 1)
}

—>〉Sun〈<—
2008-7-10 18:28
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.066103 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved