| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3017 人关注过本帖, 3 人收藏
标题:我发一个关于二进制 0 1 相互转换的 帖子 诚征优秀代码 欢迎各路高手进入 ...
只看楼主 加入收藏
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
用递归也是很巧妙的,但设置全局变量是大忌,我的代码减掉枝枝叶叶的代码:
程序代码:
#include <stdio.h> 
int main()
{ 
    int i=3456;
    unsigned int j=0xFFFFFFFF,k=0x80000000;
    for(;!(k&i)&&k;k/=2)j=j&~k;
    i=i^j;
    printf("转换数据是%6d",i);
    printf("\n");
}



[ 本帖最后由 wmf2014 于 2015-5-26 11:16 编辑 ]

能编个毛线衣吗?
2015-05-26 11:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
全局变量是大忌  说说理由呗  或者相关的引经据典

DO IT YOURSELF !
2015-05-26 11:19
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 22楼 wp231957
这不需要引经据典,凡是写程序的都应该知道这个规则,就如同知道不用goto一样。

能编个毛线衣吗?
2015-05-26 11:35
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:10 
悄悄的看帖

风回小院庭芜绿,柳眼春相续
2015-05-26 13:33
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:10 
佩服wmf2014版主的逻辑。学习了。
2015-05-26 15:13
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
但是在设置j与k的值时,要注意int类型的存储位数。
2015-05-26 15:29
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
又想到一个更简洁的,代码如下:
程序代码:
#include <stdio.h>
void main()
{
    unsigned int i=3456,j,k;
    for(j=1,k=0;i;j<<=1,i>>=1)if(!(i&1))k|=j;;
    printf("转换数据是%6d",k);
    printf("\n");
}
18:16 更换为移位运算和位运算可能会提高执行效率些。
  原为:for(j=1,k=0;i;j*=2,i/=2)if(!(i%2))k|=j;;
现改为:for(j=1,k=0;i;j<<=1,i>>=1)if(!(i&1))k|=j;;


[ 本帖最后由 wmf2014 于 2015-5-26 18:19 编辑 ]

能编个毛线衣吗?
2015-05-26 15:33
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 26楼 取名字
嗯,默认为4字节,有的2字节就麻烦了。在27楼的就可通用,不用考虑整形数的字节数。

能编个毛线衣吗?
2015-05-26 15:35
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
这个程序确实比上一个更简洁,也更容易理解,但从运行时间上来说不一定比前一个快。
2015-05-26 15:41
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 29楼 取名字
可能吧。循环内的运算尽量是加减,乘除运算时钟数多好多。

能编个毛线衣吗?
2015-05-26 15:48
快速回复:我发一个关于二进制 0 1 相互转换的 帖子 诚征优秀代码 欢迎各路高 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012885 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved