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

 时间:2026-02-13 08:37:55

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;

 }

  • 香肠烟熏炉的操作过程
  • 射水机游艺机如何玩?
  • 如何惩治熊孩子
  • 金铲铲之战赌狗流阵容推荐
  • 怎么做才可以挽回女朋友?
  • 热门搜索
    脑梗塞最佳治疗方法 五行属土的字大全 脸上长癣起皮怎么办 扇贝肉怎么做好吃 清蒸鲤鱼的家常做法 腌鸡蛋出油最好的方法 closet怎么读 豆角的做法大全家常 性与爱大全 玉米怎么炒好吃