海南新闻人民网:C语言问题?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 23:49:43
将一个十进制数转化为二进制数,并求出将二进制逆序后的十进制数。
例如:十进制 :13
二进制 :1101
二进制逆序 :1011
十进制数值 :11
注意 转换的位数。
就是将一个十进制数转化为二进制数,并求出将二进制逆序后的十进制数?
例如 把十进制数13 转成二进制 1101
再转成二进制逆序 1011

参考lishimin1972兄的,修改了一下

#include <stdio.h>

int main(int argc, char *argv[]){

unsigned int n,m,i,r;

printf("Please input a number: ");
scanf("%d",&n);

// convert
for(i=0;i<sizeof(int)*8;i++){
r=(n&1);
n>>=1;
m<<=1;
m |=r;
}

// remove zeros...
while ((m&1)==0)
m>>=1;
printf(">>%d\n",m);

return 0;
}

main()

{

int n,m,i,r;
/*n存放原始整数 m存放转换后的整数*/
char max;
printf("please input the num\n");
scanf("%d",&n);

for(i=0;n<sizeof(int)*8;i++)
{
r=(n&1);
n>>=1;
m<<=1;
m |=r;
putch('0'|r); /*输出逆序二进制数*/
}
printf("\n翻转后为:%d",m);

}

bigfatsea的回答是很好
但是我估计楼主所需要的不是这个
他交给老师,老师也肯定不会喜欢的
因为我们学生做的题目大多是脱裤子放屁的题目
所以楼主要的程序很有可能就是不用位操作的代码
基于这样的考虑,windy0206写的是用来交差好代码
但实际上bigfatsea的编程才是我们要学习的

main()

{

int n,i,a[10];

char max;
printf("please input the num\n");
scanf("%d",&n);

for(i=0;n>=2;n/=2,i++)
a[i]=n%2;
a[i]=n;

printf("result:\n");

for(n=0;n<=i;n++)
printf("%d",a[n]);

getch();

}

看=============>>>>>>>>>>>>>>>>>>>>这里!!!!!!!!!!!!!!!

楼主的意思是:输入13,程序输出11吧

以下是我调试通过的程序,超短。且易懂。
#include <stdio.h>
int main()
{
int a,b;
scanf("%d",&a);
for (b=0;a>0;)
{
b*=2;
b+=a%2;
a/=2;
}
printf("%d",b);
}

bigfatsea的回答比较正确
因为负数有符号位,正负数的位运算是不一样的,所以bigfatsea在int前加了unsigned修饰,只对正数做转换
而其他人都没有考虑这个情况
且他的程序后面有一段remove zeros
lishimin1972则没有这一段
而且bigfatsea的代码比较严谨
main()前有int
且有 return 0;
一看bigfatsea就是高手
佩服佩服