我已经制作了一个程序来表示c ++中从十进制到二进制的任何数字,但是当我尝试使用负数时,它会给我这样的结果:-1-1-1-11-1-0,我不知道我知道为什么。我使用短整数来表示从-32000到32000的数字,我也使用unsigned来获得更大的数字。我还使用数组来存储数字,然后反转它们以获得正确的表示。我不认为这是反转数组的正确方法,但它适用于我.MAX(16)用于将其余部分存储在16位数组中。 这是代码:
#include <iostream>
using namespace std;
const int MAX=16;
int main(){
int tab1[MAX];
short int n;
cout<<"Input a number: ";
cin>>n;
for (int i=0; i<sizeof(n)*8; i++){
tab1[i] = n%2;
n = n>>1;
}
cout<<"Binary representation: ";
for (int j=MAX-1;j>=0;j--){
cout<<tab1[j];
}
cout<<endl;
return 0;
}
答案 0 :(得分:1)
您的移位过程保留了符号位被翻转的事实,因此您提取的所有内容都有符号位。使用按位和(tab[i]=n&1
)而不是使用C中保留负号的%
来屏蔽它。
C中的%
运算符不是模运算符,而是余数运算符。对于余数运算符,结果的符号与被除数的符号相同。使用模运算符,结果的符号与除数相同。