| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5158 人关注过本帖
标题:关键的一步啊,负数的二进制转换,(当然还有小数)
只看楼主 加入收藏
我不信
Rank: 2
等 级:论坛游民
威 望:1
帖 子:33
专家分:24
注 册:2016-3-3
结帖率:100%
收藏
 问题点数:0 回复次数:6 
关键的一步啊,负数的二进制转换,(当然还有小数)
#include<stdio.h>
void main()
{
    int a,i,j;
    float b;
    int A[10];
    float B[10];
    printf("请输入整数部分:\n");
    scanf("%d",&a);
    //printf("请输入小数部分:\n");
    //scanf("%f",&b);
    if(a>=0)
    {  for(i=0;i<10;i++)
        {
            A[i]=a%2;
                a=a/2;
        }
        printf("二进制为:");
        for(i=9;i>=0;i--)
        {
            printf("%d",A[i]);

        }
        printf("\n");}
    else
    {
            a=-a;
            printf("-%d的二进制为:",a);
        for(i=0;i<10;i++)
        {
            A[i]=a%2;
            a=a/2;
        }
        
        printf("\n");
   
        for(i=9;i>=0;i--)
        {
            if(A[i]==0)
            printf("%d",A[i]+1);
            else
                printf("%d",A[i]-1);    //这一步便不会了,实现了按位取反,,但是最后还有个加1啊
        }


    }
}
搜索更多相关主题的帖子: include 二进制 
2016-03-07 17:40
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
整数部分先减一就行了。小数部分再后面添加,不知道小数分不分正负
#include<stdio.h>
void main()
{
    int a, i, j;
    float b;
    int A[10];
    int B[10];
    printf("请输入整数部分:\n");
    scanf("%d", &a);
    printf("请输入小数部分:\n");
    scanf("%f",&b);
    if (a >= 0)
    {
        for (i = 0; i<10; i++)
        {
            A[i] = a % 2;
            a = a / 2;
        }
        printf("二进制为:");
        for (i = 9; i >= 0; i--)
        {
            printf("%d", A[i]);

        }
        printf("\n");
    }
    else
    {        
        printf("-%d的二进制为:", a);
        a = -a - 1;
        for (i = 0; i<10; i++)
        {
            A[i] = a % 2;
            a = a / 2;
        }

        printf("\n");

        for (i = 9; i >= 0; i--)
        {
            if (A[i] == 0)
                printf("%d", A[i] + 1);
            else
                printf("%d", A[i] - 1);    //这一步便不会了,实现了按位取反,,但是最后还有个加1啊
        }
    }
    for (i = 0; i<10; i++)
    {
        B[i] = b * 2;
        b = b * 2 - B[i];
        printf("%d", B[i]);
        if (b == 0)
        {
            break;
        }
    }
    printf("\n");
}
收到的鲜花
  • 我不信2016-03-29 16:03 送鲜花  1朵   附言:我很赞同
2016-03-07 18:17
我不信
Rank: 2
等 级:论坛游民
威 望:1
帖 子:33
专家分:24
注 册:2016-3-3
收藏
得分:0 
很感谢,,不过为什么负数先减一就能实现呢,,原理是什么?
2016-03-07 19:17
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
以下是整数按二进制输出通用代码,不用上面那么麻烦求每一位数。
程序代码:
#include <stdio.h>

//将整数按二进制输出
void output(int n)
{
    unsigned int m=0x80000000;

    int i;
    char str[33];

    for(i=0;i<32;i++)
    {
        str[i]=(m&n)?'1':'0';
        m>>=1;
    }
    str[32]='\0';

    printf("%s\n",str);
}

int main()
{
    int n=-1;

    if(n>=0)
    {
        output(n);
    }
    else
    {
        output(~(-1*n)+1);  //负数按位取反再加1
    }

    return 0;
}


[此贴子已经被作者于2016-3-7 22:12编辑过]


   唯实惟新 至诚致志
2016-03-07 19:59
我不信
Rank: 2
等 级:论坛游民
威 望:1
帖 子:33
专家分:24
注 册:2016-3-3
收藏
得分:0 
楼上是来干吗的?代码自己写的吗,运行过吗?还是来水经验的?
2016-03-07 20:17
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 

   唯实惟新 至诚致志
2016-03-07 20:40
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 3楼 我不信
这要去看看《计算机组成原理》方面的知识,里面会讲原码、反码、补码的知识。
负数用补码表示的主要原因是用电路实现加法相对简单,将负数变成补码后就只需要做加法运算,不再需要专门设计减法电路。
针对楼主1楼的需求,如果只需要表示整数和浮点数的二进制,用一个类似于探针的代码可实现,另为简化代码,使用联合体,输入使用字符串,通过字符串判断输入的是整数还是浮点数决定最终不同的显示结果。

能编个毛线衣吗?
2016-03-07 21:15
快速回复:关键的一步啊,负数的二进制转换,(当然还有小数)
数据加载中...
 
   



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

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