| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3017 人关注过本帖, 3 人收藏
标题:我发一个关于二进制 0 1 相互转换的 帖子 诚征优秀代码 欢迎各路高手进入 ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
直接  ~  反转 貌似是对寄存器中的数据按位反

DO IT YOURSELF !
2015-05-26 10:13
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:10 
要求: 就是把一个整型数据按位取反  比如  1011 变为0100   1111 变为0000  1000 变为0001 等等


这不就是取反吗??

人有多懒,编程就有多难。
2015-05-26 10:18
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
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
一个字节的带符号数就和7f异或,二个字节的带符号整形,就和7fff按位异或.
如果高位是零也不反,那就把是零的高位也参与到屏蔽位中置"0",再计算屏蔽数

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

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

DO IT YOURSELF !
2015-05-26 10:38
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 15楼 wp231957
只测试345,还没来得及试其它的
#include <math.h>

main()
 { int j,i=345;
   int temp;
   int shelt=0;
   system("cls");
   temp=i;
   if (temp<0) temp=-temp;

   for(j=15;j>0;j--)
     { if(temp/pow(2,j)>1) break;}
   printf("Max bit not zer is:%d\n",j);
   for(temp=j;temp>-1;temp--)
     shelt=shelt+pow(2,temp);
   printf("Shelt is %d\n" ,shelt);
   printf("The result is %d\n",i^shelt);

   getch();
   }

以前只接触过Turboc 2.0,都有十多二十年没用,忘得差不多了。前三年也就在keli5上用来写单片机的代码,唉,会的也是一去不复返

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

大开眼界
2015-05-26 10:52
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
我的算法
程序代码:
#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");
}


能编个毛线衣吗?
2015-05-26 11:03
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
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 19楼 wp231957
这是处理高位连续0的,一个循环将取反码对应高位设置为0,最后两个数异或即可。

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



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

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