正数和0用原码存储,最高一位为符号位,负数为1,正数和0为0,负数在计算机用补码表示,就为原码取反(符号位除外)再加1,或者也可以先+1,再取反。c++的stl中的bitset很方便用例解决有关二进制的问题,它是一个二进制数组。代码如下:
#include <stdio.h>
#include <limits.h>
void dec_to_bin(int n){
int b[32]={0},i=31;
if(n<0) {
n++;
n=-n;
b[0]=1;
while(n){
b[i--]=n%2;
n/=2;
}
for(i=31;i>0;i--)
b[i]=1-b[i];
}else {
int j=31;
while(n){
b[j--]=n%2;
n/=2;
}
}
for(i=0;i<32;i++){
if(i&&i%4==0) printf(" ");
printf("%d",b[i]);
}
}
int main(){
int n;
scanf("%d",&n);
dec_to_bin(n);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
int x;
cin>>x;
bitset<32> b(x);///将整形转化为32位二进制数 、、
cout<<b<<endl;
}