C++中十进制怎么转换成二进制???
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;
}