位运算实现将十进制转换为二进制

勇zhe无wei 2013-03-17 04:24:00
#include<stdio.h>
void exchan(int b);
int main()
{
int a;
printf("input a=");
scanf("%d",&a);
printf("%d的二进制形式输出\n",a);
exchan(a);
return 0;
}
void exchan(int b)
{
int i,t;
t=1;
t=t<<31;
for(i=1;i<=32;i++)
{
putchar(b&t?'1':'0');
b=b<<1;

if(i%8==0)
printf(" ");
}
printf("\n");
}
请问exchan()里面怎样理解?计算机是怎么运算的
...全文
883 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2013-03-21
  • 打赏
  • 举报
回复
单步跟踪,看变化
常如意 2013-03-21
  • 打赏
  • 举报
回复
(b&t?'1':'0'); //b和t做位与计算,只可以判断出b的第31位是不是1,是1输出,1是0输出0 如此循环即可得出每一位位0还是1
armsword 2013-03-21
  • 打赏
  • 举报
回复
引用 1 楼 zhang20072844 的回复:
int b 32位,计算机内存储存0和1,从第0位到31共32位来表示每个数字 比如10 就是1010 = 0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 0+2+0+8=10(就是从低位到高位,每位的权值提高2倍) 现在给你一个十进制数,要求2进制,只需要看看它各个位是0还是1就行了 void exchan(int b) { ……
这个解释比较到位。
ytlcainiao 2013-03-21
  • 打赏
  • 举报
回复
#include<stdio.h>
#define TRUE 1
void binary_dec(unsigned int,unsigned int);
int main()
{
	unsigned int number;
	printf("请输入一个十进制的数:\n");
	scanf("%d",&number);
	printf("请输入你需要转换的进制:\n");
	unsigned int bin;
	scanf("%d",&bin);
	if(bin!=2&&bin!=8&&bin!=10&&bin!=16)
		printf("只能转换:2、8、10、16,请重新输入!");//出错
	binary_dec(number,bin);
}

void binary_dec(unsigned int num,unsigned int bin)
{
	unsigned int dec;
	dec=num/bin;
	if(dec!=0)
		binary_dec(dec,bin);
	if(bin==2||bin==8||bin==10)

		putchar("0123456789"[num%bin]);//输出转换进制的数

	else if(bin==16)

		putchar("0123456789ABCDEF"[num%bin]);//输出二进制的数

}
勇zhe无wei 2013-03-18
  • 打赏
  • 举报
回复
b&t 怎么只是进行最高位的运算?
wjain 2013-03-17
  • 打赏
  • 举报
回复
比如6(00000000 00000000 00000000 00000110): b = 6; t = 10000000 0000000 00000000 00000000; b&t (00000000 00000000 00000000 000000000 00000000) & 运算你知道吧。 b=b << 1; i= 30的时候b就成了: 11000000 0000000 00000000 00000000 b&t 就不是0了 就该输入1了 之前已经有29个0了。。。 后面的自己想吧。
AndyZhang 2013-03-17
  • 打赏
  • 举报
回复
int b 32位,计算机内存储存0和1,从第0位到31共32位来表示每个数字 比如10 就是1010 = 0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 0+2+0+8=10(就是从低位到高位,每位的权值提高2倍) 现在给你一个十进制数,要求2进制,只需要看看它各个位是0还是1就行了 void exchan(int b) { int i,t; t=1; t=t<<31; //t= 10000000 00000000 00000000 00000000 = 1*2^31 for(i=1;i<=32;i++) { putchar(b&t?'1':'0'); //b和t做位与计算,只可以判断出b的第31位是不是1,是1输出,1是0输出0 b=b<<1; //然后b左移一位相当于乘以2,那么它的第30位就变成了第31位,第31位就没了,超出int范围,这样循环能够找到b的从第31位到第0位二进制上是0或者1,这样就求出了二进制表示 if(i%8==0) //每个字节8位,中间打一个空格 printf(" "); } printf("\n"); }

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧