繁体   English   中英

C ++二进制负数表示

[英]c++ binary negative numbers representations

我已经制作了一个程序来表示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;
}

您的移位过程保留了符号位被翻转的事实,因此您提取的所有内容都具有符号位。 通过按位和( tab[i]=n&1 )而不是使用C中保留负号的%屏蔽它。

C中的%运算符不是模运算符,而是余数运算符。 对于余数运算符,结果的符号与除数的符号相同。 使用模运算符时,结果的符号与除数相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM