当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 11:28 
头像

注册: 2010-01-13 20:26
帖子: 82
送出感谢: 0 次
接收感谢: 0 次
如题.书上只有写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...


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 11:30 
头像

注册: 2008-12-13 19:39
帖子: 13284
地址: 物华天宝人杰地灵
送出感谢: 1
接收感谢: 6
把打出来的16进制的数,每个数符换成对应的四位01的组合不就得了。 :em06


_________________
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 11:35 
头像

注册: 2010-01-13 20:26
帖子: 82
送出感谢: 0 次
接收感谢: 0 次
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...


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 11:36 

注册: 2007-08-02 20:29
帖子: 21302
系统: 窓辺とうこ
送出感谢: 0 次
接收感谢: 22
写个函数就是了啦


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 11:37 
头像

注册: 2010-01-13 20:26
帖子: 82
送出感谢: 0 次
接收感谢: 0 次
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...


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 12:36 

注册: 2009-04-03 15:10
帖子: 1831
送出感谢: 0 次
接收感谢: 0 次
用位移啊……
比如
代码:
#include <stdio.h>
int main()
{
   int a= 123;
   int i;
   for(i=31;i>=0;--i){
      printf("%d",(a>>i)&0x1);
   }
   return (0);
}


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 13:11 

注册: 2010-02-28 9:11
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 14:06 

注册: 2009-04-03 15:10
帖子: 1831
送出感谢: 0 次
接收感谢: 0 次
xwg 写道:
google有答案,是这么写的:
for(i = sizeof(x)*8-1;i >= 0;i--)
{
printf("%d", (x>>i)&1);
}

还不是跟我的算法一样……
另外楼主,注意你的cpu是大头存储还是小头存储,两种方法下的代码是不一样的,如果是intel的cpu,那就是我给你的和楼上给你的代码就可以


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-15 18:16 

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


怪了,我发贴的时候,你的贴还没显示啊!!
是一样的。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-16 13:09 
头像

注册: 2010-01-13 20:26
帖子: 82
送出感谢: 0 次
接收感谢: 0 次
为什么要(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...


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-16 13:57 

注册: 2009-04-03 15:10
帖子: 1831
送出感谢: 0 次
接收感谢: 0 次
19900828xy 写道:
为什么要(x>>1)&1....&1有什么效果吖?

&1是为了屏蔽高位,因为极有可能给出的数的最高位,第31位上是个1,那么右移的时候处理器有可能按照符号位扩展,移进来一串1,&1就把第1位到第31位全部屏蔽为0


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-16 16:20 
头像

注册: 2010-01-13 20:26
帖子: 82
送出感谢: 0 次
接收感谢: 0 次
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...


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-17 17:24 

注册: 2006-12-18 15:57
帖子: 36
送出感谢: 0 次
接收感谢: 0 次
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位的短整型指针然后打印。

所以,我的经验就是,如果不是有非常强的原因,绝不要做不同长度指针的强制转换。


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 请教.在C中如何打印出二进制的数?
帖子发表于 : 2010-03-19 13:37 
头像

注册: 2010-03-18 8:44
帖子: 39
地址: 四海
送出感谢: 0 次
接收感谢: 0 次
自己写函数, 十六进制转二进制方便


_________________
艾泽拉斯探险队 *Corpora


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 14 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译