| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3017 人关注过本帖, 3 人收藏
标题:我发一个关于二进制 0 1 相互转换的 帖子 诚征优秀代码 欢迎各路高手进入 ...
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏(3)
已结贴  问题点数:100 回复次数:13 
我发一个关于二进制 0 1 相互转换的 帖子 诚征优秀代码 欢迎各路高手进入:
样例输出见图片:
图片附件: 游客没有浏览图片的权限,请 登录注册


要求: 就是把一个整型数据按位取反  比如  1011 变为0100   1111 变为0000  1000 变为0001 等等

我的代码  (不知是否有bug 欢迎指正)

程序代码:
#include <stdio.h>  

//按位(二进制)输出一个整型数据
void prnbit(int k)
{
    if(k==0) return;
    prnbit(k>>1);
    if(k & 1==1) printf("%1d",1); else printf("%1d",0);
}

int main() 
{  
    int i=3456;
    printf("原始数据是%6d  按位(二进制)输出是:  ",i);
    prnbit(i);
    printf("\n");
    int j=i;
    int k=0;
    while(i>0)
    {
        if(i & 1==1) j &=(~(1<<k));else j|=(1<<k);  //判断当前位是1 则置0  反之是0则置1
        i>>=1;
        k++;
    }
    printf("\n转换后是  %6d  按位(二进制)输出是:  ",j);
    prnbit(j);
    printf("\n");
    return 0;
}  
搜索更多相关主题的帖子: 二进制 color 图片 
2015-05-26 09:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 2楼 embed_xuel
我的vs2010 有一个警告:“&”: 检查运算符优先级可能存在的错误;使用圆括号阐明优先级

但是 貌似不影响结果呢

DO IT YOURSELF !
2015-05-26 10:00
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用wmf2014在2015-5-26 10:02:47的发言:

没搞错吧?这需要算法?一个取反运算符不就解决了。



不一样的  

比如:
    int i=345;
    printf("\n转换后是  %6u    ",~i);
这个和我的测试案例是不一样的结果  也不是我想要的结果

[ 本帖最后由 wp231957 于 2015-5-26 10:12 编辑 ]

DO IT YOURSELF !
2015-05-26 10:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 7楼 wmf2014
你试试

DO IT YOURSELF !
2015-05-26 10:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 9楼 wmf2014
是的

DO IT YOURSELF !
2015-05-26 10:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
直接  ~  反转 貌似是对寄存器中的数据按位反

DO IT YOURSELF !
2015-05-26 10:13
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 12楼 TAAAAB
是我没说明白  高位 连0 不能置 1

DO IT YOURSELF !
2015-05-26 10:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 14楼 lianyicq
代码 看看 可以不

DO IT YOURSELF !
2015-05-26 10:38
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
参照16楼的代码 改了一下代码

程序代码:
#include <stdio.h>  

int s=0;

//按位(二进制)取反 高位连0 不取反
void resbit(int k)
{
    if(k==0) return;
    resbit(k>>1);
    if(k & 1==1) s=s*2+0; else s=s*2+1;
}

int main() 
{  
    int i=3456;
    resbit(i);
    printf("\n转换后是  %d \n",s);
    return 0;
}  

DO IT YOURSELF !
2015-05-26 11:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用wmf2014在2015-5-26 11:03:16的发言:

我的算法#include <stdio.h>  

//按位(二进制)输出一个整型数据
void prnbit(int k)
{
    if(k==0) return;
    prnbit(k>>1);
    if(k & 1==1) printf("%1d",1); else printf("%1d",0);
}

int main()
{
    int i=3456;
    unsigned int j=0xFFFFFFFF,k=0x80000000;
    for(;!(k&i)&&k;k/=2)j=j&~k;
    printf("原始数据是%6d  按位(二进制)输出是:  ",i);
    prnbit(i);
    printf("\n");
    i=i^j;
    printf("转换数据是%6d  按位(二进制)输出是:  ",i);
    prnbit(i);
    printf("\n");
}


你这个是干嘛用的啊   for(;!(k&i)&&k;k/=2)j=j&~k;   看不懂

DO IT YOURSELF !
2015-05-26 11:07
快速回复:我发一个关于二进制 0 1 相互转换的 帖子 诚征优秀代码 欢迎各路高 ...
数据加载中...
 
   



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

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