C++中十进制怎么转换成二进制???

2025-10-08 16:45:14

1、计算机导论说过,计算机将数据存储为补码所以进制转换的实现就可以通过位运算实现了

对于正数直接输出补码就可以了

对于负数先将补码减1再按位取反,得到原码,将第1位换为-号就可以了

举个关于负数的栗子

2、例如-1

补码  :11111111111111111111111111111111

减1之后就是

11111111111111111111111111111110

按位取反

00000000000000000000000000000001

第一位替换为-号

-0000000000000000000000000000001

按照这个思路很容易完成二进制转换

3、下面是C++程序代码

#include<cstdio>

#include<stack>

#include<iostream>

using namespace std;

void showbin(int a)

{

    int l=32;

    stack <int> num;

    if(a>>(l-1)&1==1)//补码转换成原码

    {

        a--;

        a=~a;

        a|=1<<(l-1);

    }

    for(int i=0;i<l;i++)//每个bit入栈

    {

        int b=a>>i&1;

        num.push(b);

    }

    cout<<"二进制:";

    if(num.top()==1)

    {

        cout<<'-';

        l--;

        num.pop();

    }

    for(int i=0;i<l;i++)

    {

        cout<<num.top();

        num.pop();

    }

    cout<<endl;

}

void showybin(int a)

{

    int l=32;

    stack <int> num;

    if(a>>(l-1)&1==1)//补码转换成原码

    {

        a--;

        a=~a;

        a|=1<<(l-1);

    }

    for(int i=0;i<l;i++)//每个bit入栈

    {

        int b=a>>i&1;

        num.push(b);

    }

    cout<<"原码  :";

    for(int i=0;i<l;i++)

    {

        cout<<num.top();

        num.pop();

    }

    cout<<endl;

}

void showcbin(int a)//显示补码

{

    int l=32;

    stack <int> num;

    for(int i=0;i<l;i++)//每个bit入栈

    {

        int b=a>>i&1;

        num.push(b);

    }

    cout<<"补码  :";

    for(int i=0;i<l;i++)

    {

        cout<<num.top();

        num.pop();

    }

    cout<<endl;

}

 int main()

 {

     int a;

     while(1)

        {

          cin>>a;

          showbin(a);

          showcbin(a);

          showybin(a);

        }

     return 0;

 }

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢