请教.在C中如何打印出二进制的数?
- 19900828xy
- 帖子: 82
- 注册时间: 2010-01-13 20:26
- 联系:
请教.在C中如何打印出二进制的数?
如题.书上只有写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...
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中如何打印出二进制的数?
把打出来的16进制的数,每个数符换成对应的四位01的组合不就得了。 

行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
海内生明月,天涯共此夕。
--------------------吾本独!
- 19900828xy
- 帖子: 82
- 注册时间: 2010-01-13 20:26
- 联系:
Re: 请教.在C中如何打印出二进制的数?
挖....那要是很多很大的数不是忙死了??wangdu2002 写了:把打出来的16进制的数,每个数符换成对应的四位01的组合不就得了。
ACER ASPIRE 4740G
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
-
- 论坛版主
- 帖子: 21308
- 注册时间: 2007-08-02 20:29
- 系统: 窓辺とうこ
Re: 请教.在C中如何打印出二进制的数?
写个函数就是了啦
- 19900828xy
- 帖子: 82
- 注册时间: 2010-01-13 20:26
- 联系:
Re: 请教.在C中如何打印出二进制的数?
就是说把它先化成8进制或16进制...再把这个数分成几段转成2进制再合并打印?JiangHui 写了:写个函数就是了啦
ACER ASPIRE 4740G
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
-
- 帖子: 1831
- 注册时间: 2009-04-03 15:10
Re: 请教.在C中如何打印出二进制的数?
用位移啊……
比如
比如
代码: 全选
#include <stdio.h>
int main()
{
int a= 123;
int i;
for(i=31;i>=0;--i){
printf("%d",(a>>i)&0x1);
}
return (0);
}
-
- 帖子: 38
- 注册时间: 2010-02-28 9:11
Re: 请教.在C中如何打印出二进制的数?
google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
-
- 帖子: 1831
- 注册时间: 2009-04-03 15:10
Re: 请教.在C中如何打印出二进制的数?
还不是跟我的算法一样……xwg 写了:google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
另外楼主,注意你的cpu是大头存储还是小头存储,两种方法下的代码是不一样的,如果是intel的cpu,那就是我给你的和楼上给你的代码就可以
-
- 帖子: 38
- 注册时间: 2010-02-28 9:11
Re: 请教.在C中如何打印出二进制的数?
怪了,我发贴的时候,你的贴还没显示啊!!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中如何打印出二进制的数?
为什么要(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...
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
-
- 帖子: 1831
- 注册时间: 2009-04-03 15:10
Re: 请教.在C中如何打印出二进制的数?
&1是为了屏蔽高位,因为极有可能给出的数的最高位,第31位上是个1,那么右移的时候处理器有可能按照符号位扩展,移进来一串1,&1就把第1位到第31位全部屏蔽为019900828xy 写了:为什么要(x>>1)&1....&1有什么效果吖?
- 19900828xy
- 帖子: 82
- 注册时间: 2010-01-13 20:26
- 联系:
Re: 请教.在C中如何打印出二进制的数?
哈~~明白啦...~~thanksdshbusiness 写了:&1是为了屏蔽高位,因为极有可能给出的数的最高位,第31位上是个1,那么右移的时候处理器有可能按照符号位扩展,移进来一串1,&1就把第1位到第31位全部屏蔽为019900828xy 写了:为什么要(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...
CPU:INTEL core i3
GPU:NVDIA geforce 310M
OS: Ubuntu 10.04
--------------------------------------
I love Ubuntu,I love Linux...
-
- 帖子: 36
- 注册时间: 2006-12-18 15:57
Re: 请教.在C中如何打印出二进制的数?
我不觉得这个会跟CPU是BE还是LE相关。不信你可以试试。一般情况下,只有当你做不同长度数据类型强制转换的时候才会有大和小的问题。比如有个指针指向32位长整型,你一定要给转成一个指向16位的短整型指针然后打印。xwg 写了:怪了,我发贴的时候,你的贴还没显示啊!!dshbusiness 写了:xwg 写了:google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}
还不是跟我的算法一样……
另外楼主,注意你的cpu是大头存储还是小头存储,两种方法下的代码是不一样的,如果是intel的cpu,那就是我给你的和楼上给你的代码就可以
是一样的。
所以,我的经验就是,如果不是有非常强的原因,绝不要做不同长度指针的强制转换。
- dos5gw
- 帖子: 39
- 注册时间: 2010-03-18 8:44
- 来自: 四海