手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2024-10-13 17:02:38

1、计算机导论说过,计算机将数据存储为补码所以进制转换的实现就可以通过位运算实现了对于正数直接输出补码就可以了对于负数先将补码减1再按位取反,得到原码,将第1位换为-号就可以了举个关于负数的栗子

2、例如-1补码 :11111111111111111111111111111111减1之后就是11111111111111111111111111111110按位取反00000000000000000000000000000001第一位替换为-号-0000000000000000000000000000001按照这个思路很容易完成二进制转换

3、下面是C++程序代码#i艘绒庳焰nclude<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;}

© 手抄报圈