补漆笔补后不平怎么办:C语言问题?
来源:百度文库 编辑:高校问答 时间:2024/10/02 11:14:42
例如:十进制 :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就是高手
佩服佩服