论坛: 编程破解 标题: 取奇位问题 复制本贴地址    
作者: sniper167 [sniper167]    论坛用户   登录
写一个函数,对一个16位的二进制数取出他的奇数位(即从左边起第1,3,5・・・,15位)。
main()
{unsigned getbits(unsigned);
unsigned int a;
printf ("\ninput an octal number:");
scanf ("%o",&a);
printf ("result:%o\n",getbits(a));
}
unsigned getbits(unsigned nalue)
{int i,j,m,n;
unsigned int z,a,q;
z=0;
for (i=1;i<=15;i+=2)
    {q=1;
    for (j=1;j<=(16-i-1);j++)
        q=q*2;
    a=value>>(16-i);
    a=a<<15;
    a=a>>15;
    z=z+a*q;
    }
return(z);
}
这个函数我看不懂,哪位帮忙加几条注释,谢谢!


这个函数是我自己写的,是将一个数与1010101010101010相与,就可以保留奇数位,偶数位全为0,可是怎样才能将奇数位提出来构成一个新的数呢?谢谢
unsigned getbits(unsigned value)
{int i;
unsigned int a;
for (i=0;i<8;i++)
    {a=0+2;
    a=a<<2;
    }
value=value&a;
return(value);
}

地主 发表时间: 04-02-24 12:41

回复: 286 [unique]   版主   登录
main()
{
unsigned getbits(unsigned);  //函数声明,该名应该最到程序最头,放此处不合适。
unsigned int a;
printf ("\ninput an octal number:"); 
scanf ("%o",&a);              //请输入一个八进制数。
printf ("result:%o\n",getbits(a));  //打印。
}
unsigned getbits(unsigned nalue)
{
int i,j,m,n;
unsigned int z,a,q;
z=0;
for (i=1;i<=15;i+=2)    //i表示奇数位。
    {
    q=1;
    for (j=1;j<=(16-i-1);j++)
        q=q*2;    //q表示要该奇数位为1,其它为0的数
    a=value>>(16-i);
    a=a<<15;
    a=a>>15;      //a左移右移无非是想去掉某位周围的1
    z=z+a*q;      //z加上二者乘积,不明白了。
    }
return(z);    //没看懂这么烂的程序。
}

B1层 发表时间: 04-02-24 12:54

回复: sniper167 [sniper167]   论坛用户   登录
多谢286了
其实不用那摸麻烦,只要写一下函数getbits的注释就行

这个程序是我在<<C程序习题答案>>(就是潭浩强那本书上习题的答案)上看见的
看不懂
那286有没有更好的?

B2层 发表时间: 04-02-24 13:00

回复: 286 [unique]   版主   登录
将一个数的奇数位形成一个新数。
unsigned unionodd(unsigned oldvalue)
{
        int i;
        unsigned newvalue=0;
        oldvalue>>1;        //如果是取偶数位,则去掉该行。
        for (i=0;i<32;i+=2)  //如果你使用的是TC2.0,将32改成16。
        {
                if (oldvalue & 1==1)  //最低位为1
                      newvalue+=1<<i/2;
                oldvalue>>2;
        }
        return newvalue;
}


[此贴被 286(unique) 在 02月25日10时56分 编辑过]

B3层 发表时间: 04-02-24 13:12

回复: sniper167 [sniper167]   论坛用户   登录
感谢 286



B4层 发表时间: 04-02-24 13:19

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号