| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1703 人关注过本帖
标题:[求助]二进制数取出它的奇数位
只看楼主 加入收藏
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
 问题点数:0 回复次数:8 
[求助]二进制数取出它的奇数位


写一个函数,对于一个16位的二进制数取出它的奇数位(即从左边起第1,3,5…..15位),

看着下面的代码,想了半天也没想明白,哪位给讲一讲? 多谢了

#include<stdio.h>
int main()
{ unsigned getbits(unsigned);
unsigned int a;
printf("\nInput an octal number:");
scanf("%o",&a);
printf("result:%o\n",getbits(a));
}
unsigned getbits(unsigned value)
{ int i,j,m,n;
unsigned int z,a,q;
z=0;
for(i=1;i<=15;i++)
{ q=1;
for(j=1;j<=(16-i-1)/2;j++)
q=q*2;
a=value>>(16-2);
a=a<<15;
a=a>>15;
z=z+a*q;
}
return(z);
}

[此贴子已经被作者于2006-9-13 11:55:24编辑过]

搜索更多相关主题的帖子: 奇数位 二进制数 unsigned int 
2006-09-13 10:55
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 

怎么没人?


只剩一年了………… 够了!
2006-09-13 12:01
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 

你要把数取到什么地方啊?


2006-09-13 12:38
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 
以下是引用ww84020209在2006-9-13 12:38:17的发言:

你要把数取到什么地方啊?

就是返回值呀,给讲讲程序就好


只剩一年了………… 够了!
2006-09-13 17:53
HuiSky
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-5-13
收藏
得分:0 
你这个程序应该是错的,对于输入7(0000 0000 0000 0111),结果是0吗?应该是2(0000 0000 0000 0010)吧?
unsigned int a;
unsigned int result=0;
int i;
for(i=1;i<16;i+=2)
result+=a&(1<<i);

这个你应该会明白的。

2006-09-13 21:10
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 
以下是引用waynebeat在2006-9-13 17:53:06的发言:

就是返回值呀,给讲讲程序就好

比如1111 1111 1111 1111 取出奇数位,是返回1010 1010 1010 1010 还是返回 1111 1111


2006-09-13 23:30
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 
以下是引用ww84020209在2006-9-13 23:30:53的发言:

比如1111 1111 1111 1111 取出奇数位,是返回1010 1010 1010 1010 还是返回 1111 1111

先道歉,我没回答好问题,其实我想要返回第二种
不过第一种,五楼已经给出程序了,也学到东西了,多谢了,
第二种应该怎么写呢?
继续请教,呵呵

[此贴子已经被作者于2006-9-13 23:51:51编辑过]


只剩一年了………… 够了!
2006-09-13 23:51
HuiSky
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-5-13
收藏
得分:0 
result=0;
for(i=15;i>=0;i-=2)
{
b=a&(1<<i);
if(b)
{
result<<=1;
result+=1;
}
}
我不知道你的意思是把奇数取出来扔掉保留偶数位,还是把奇数取出来,保留为一个数.
上面的程序是按2结果为1,1结果为0.
另一种情况可把15改为16.

2006-09-14 20:51
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
/*给个很笨的程序*/

#include"math.h"
main()
{
int i=0,j=1,r,num,sum=0;
int data[16];
printf("input a number:");
scanf("%d",&num);
while(num!=0)
{
r=num%2;
if(j%2==1)
{
data[i]=r;
i++;
}
num/=2;
j++;
}
while(i-->=0)
{
sum+=data[i]*(int)pow(2,i);
}
printf("%d\n",sum);
getch();
}

倚天照海花无数,流水高山心自知。
2006-09-14 21:06
快速回复:[求助]二进制数取出它的奇数位
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018082 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved