C++ 二进制负数表示

标签 c++ arrays binary reverse

我已经用 C++ 编写了一个程序来表示从十进制到二进制的任何数字,但是当我尝试使用负数时,它会给我这样的结果:-1-1-1-11-1-0,我不知道不知道为什么。我用一个 short int 来表示从 -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 中的% 运算符不是取模运算符而是取余运算符。对于余数运算符,结果的符号与被除数的符号相同。对于模运算符,结果的符号与除数相同。

关于C++ 二进制负数表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33780646/

相关文章:

c++ - 全局排序和每个原子变量排序有何不同?

python - python 中的数组/图像插值

perl - 如何将二进制数向左移动

c# - 写入二进制文件

c++ - 程序在我的机器上运行 2 秒,但在其他机器上运行 15 秒

c++ - "Interface Object"模式。合理的?

C++ cout 十六进制格式

Java ArrayList 更新点似乎用最新的点替换所述数组中的所有元素

python - 在没有 np.concatenate 或 np.append 的情况下将 3D numpy 数组转换为 2D

java - ObjectInputStream 和二进制数据