请教.在C中如何打印出二进制的数?

软件和网站开发以及相关技术探讨
回复
头像
19900828xy
帖子: 82
注册时间: 2010-01-13 20:26
联系:

请教.在C中如何打印出二进制的数?

#1

帖子 19900828xy » 2010-03-15 11:28

如题.书上只有写10进制,8进制,16进制..就是没有打印2进制...求教..谢啦...
ACER ASPIRE 4740G
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
头像
wangdu2002
帖子: 13284
注册时间: 2008-12-13 19:39
来自: 物华天宝人杰地灵

Re: 请教.在C中如何打印出二进制的数?

#2

帖子 wangdu2002 » 2010-03-15 11:30

把打出来的16进制的数,每个数符换成对应的四位01的组合不就得了。 :em06
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
头像
19900828xy
帖子: 82
注册时间: 2010-01-13 20:26
联系:

Re: 请教.在C中如何打印出二进制的数?

#3

帖子 19900828xy » 2010-03-15 11:35

wangdu2002 写了:把打出来的16进制的数,每个数符换成对应的四位01的组合不就得了。 :em06
挖....那要是很多很大的数不是忙死了??
ACER ASPIRE 4740G
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

Re: 请教.在C中如何打印出二进制的数?

#4

帖子 JiangHui » 2010-03-15 11:36

写个函数就是了啦
头像
19900828xy
帖子: 82
注册时间: 2010-01-13 20:26
联系:

Re: 请教.在C中如何打印出二进制的数?

#5

帖子 19900828xy » 2010-03-15 11:37

JiangHui 写了:写个函数就是了啦
就是说把它先化成8进制或16进制...再把这个数分成几段转成2进制再合并打印?
ACER ASPIRE 4740G
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
dshbusiness
帖子: 1831
注册时间: 2009-04-03 15:10

Re: 请教.在C中如何打印出二进制的数?

#6

帖子 dshbusiness » 2010-03-15 12:36

用位移啊……
比如

代码: 全选

#include <stdio.h>
int main()
{
	int a= 123;
	int i;
	for(i=31;i>=0;--i){
		printf("%d",(a>>i)&0x1);
	}
	return (0);
}
xwg
帖子: 38
注册时间: 2010-02-28 9:11

Re: 请教.在C中如何打印出二进制的数?

#7

帖子 xwg » 2010-03-15 13:11

google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
dshbusiness
帖子: 1831
注册时间: 2009-04-03 15:10

Re: 请教.在C中如何打印出二进制的数?

#8

帖子 dshbusiness » 2010-03-15 14:06

xwg 写了:google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
还不是跟我的算法一样……
另外楼主,注意你的cpu是大头存储还是小头存储,两种方法下的代码是不一样的,如果是intel的cpu,那就是我给你的和楼上给你的代码就可以
xwg
帖子: 38
注册时间: 2010-02-28 9:11

Re: 请教.在C中如何打印出二进制的数?

#9

帖子 xwg » 2010-03-15 18:16

dshbusiness 写了:
xwg 写了:google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
还不是跟我的算法一样……
另外楼主,注意你的cpu是大头存储还是小头存储,两种方法下的代码是不一样的,如果是intel的cpu,那就是我给你的和楼上给你的代码就可以
怪了,我发贴的时候,你的贴还没显示啊!!
是一样的。
头像
19900828xy
帖子: 82
注册时间: 2010-01-13 20:26
联系:

Re: 请教.在C中如何打印出二进制的数?

#10

帖子 19900828xy » 2010-03-16 13:09

为什么要(x>>1)&1....&1有什么效果吖?
ACER ASPIRE 4740G
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
dshbusiness
帖子: 1831
注册时间: 2009-04-03 15:10

Re: 请教.在C中如何打印出二进制的数?

#11

帖子 dshbusiness » 2010-03-16 13:57

19900828xy 写了:为什么要(x>>1)&1....&1有什么效果吖?
&1是为了屏蔽高位,因为极有可能给出的数的最高位,第31位上是个1,那么右移的时候处理器有可能按照符号位扩展,移进来一串1,&1就把第1位到第31位全部屏蔽为0
头像
19900828xy
帖子: 82
注册时间: 2010-01-13 20:26
联系:

Re: 请教.在C中如何打印出二进制的数?

#12

帖子 19900828xy » 2010-03-16 16:20

dshbusiness 写了:
19900828xy 写了:为什么要(x>>1)&1....&1有什么效果吖?
&1是为了屏蔽高位,因为极有可能给出的数的最高位,第31位上是个1,那么右移的时候处理器有可能按照符号位扩展,移进来一串1,&1就把第1位到第31位全部屏蔽为0
哈~~明白啦...~~thanks
ACER ASPIRE 4740G
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
fjw1613
帖子: 36
注册时间: 2006-12-18 15:57

Re: 请教.在C中如何打印出二进制的数?

#13

帖子 fjw1613 » 2010-03-17 17:24

xwg 写了:
dshbusiness 写了:
xwg 写了:google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
还不是跟我的算法一样……
另外楼主,注意你的cpu是大头存储还是小头存储,两种方法下的代码是不一样的,如果是intel的cpu,那就是我给你的和楼上给你的代码就可以
怪了,我发贴的时候,你的贴还没显示啊!!
是一样的。
我不觉得这个会跟CPU是BE还是LE相关。不信你可以试试。一般情况下,只有当你做不同长度数据类型强制转换的时候才会有大和小的问题。比如有个指针指向32位长整型,你一定要给转成一个指向16位的短整型指针然后打印。

所以,我的经验就是,如果不是有非常强的原因,绝不要做不同长度指针的强制转换。
头像
dos5gw
帖子: 39
注册时间: 2010-03-18 8:44
来自: 四海

Re: 请教.在C中如何打印出二进制的数?

#14

帖子 dos5gw » 2010-03-19 13:37

自己写函数, 十六进制转二进制方便
艾泽拉斯探险队 *Corpora
回复