【问题标题】:c++ binary negative numbers representationsc++二进制负数表示
【发布时间】:2016-02-20 05:21:42
【问题描述】:

我已经编写了一个程序来在 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;
}

【问题讨论】:

    标签: c++ arrays binary reverse


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2022-09-26
      • 2010-11-17
      • 2017-03-16
      • 2023-03-25
      相关资源
      最近更新 更多