带前导零的二进制数

Binary numbers with leading zeros

我一直在做一个作业,我必须在其中使用按位运算符 (OR、AND 或 NOT)

该程序有一个固定的 4X4 矩阵,用户假设向程序输入一个查询,对两个二进制数进行 AND 运算,对它们进行 OR 运算...等等

问题是 example:0111 的 "zero leading" 二进制数显示为值 73 即使我设法用 setfill() 和 setw() 来计算它 我无法对实际的二进制值执行按位运算!

N.B: 我试过字符串而不是整数,但按位运算仍然不适用。

例如:

如果我想和两个二进制值比方说 int x=1100 和 int y=0100 在另一个 int z z=x&y;

结果假设为 0100 但是出现的结果是64

这也是我尝试将 y 打印到屏幕时出现的结果

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

int main()
{

    int Matrix[4][4]={{1,1,0,0},{1,1,0,1},{1,1,0,1},{0,1,0,0}};
    string Doc[4]={"Doc1","Doc2","Doc3","Doc4"};
    string Term[4]={"T1","T2","T3","T4"};

    cout << "THE MATRIX IS:"<<endl;

    for(int i=0;i<4;i++)
    {
        cout<<"\t"<<Doc[i];
    }
    cout<<"\n";
    for(int row=0; row<4;row++)
    {
        cout<<Term[row]<<"\t";
        for(int col=0;col<4;col++)
        {
            cout<<Matrix[row][col]<<"\t";
        }
        cout<<endl;
    }

    int term1=1100;
    cout<<"\nTerm1= "<<term1;
    int term2=1101;
    cout<<"\nTerm2= "<<term2;
    int term3=1101;
    cout<<"\nTerm3= "<<term3;
    int term4=0100;
    cout<<"\nTerm4= "<<setfill('0')<<setw(4)<<term4;


    int Q=term1&term4;
    cout<<"\n Term1 and Term4 ="<<Q;

    system("pause");
    return 0;
}

当您在代码中编写 0111 时,编译器会假定它是八进制的,因为八进制数字从零开始。如果你写 111 它将是十进制。

C++14 添加了二进制文字前缀,因此您可以编写 0b111 来获得您想要的内容。

你的问题还不是很清楚。你说过你有 4x4 矩阵,它是什么类型的矩阵或二维数组?所以也许你可以详细说明一下。

关于二进制的处理,同学们通常比较困惑的是,如果你使用的是整数变量,你可以对这些变量进行位操作,结果仍然是整数格式。如果你碰巧想看看在按位操作过程中发生了什么并可视化这个过程,你总是可以使用 bitset 对象,如下所示。

#include <iostream>
#include <bitset>

int main() {
    int a = 7, b = a>>3, c = a<<2;

    std::cout << "a = " << std::bitset<8>(a)  << std::endl;
    std::cout << "b = " << std::bitset<8>(b)  << std::endl;
    std::cout << "c = " << std::bitset<8>(c) << std::endl;
}

哪个应该打印

00000111
00000000
00011100

因此,尝试使用您的变量,然后使用 bitset 将它们可视化为二进制文件是教您 HEX、OCT、DEC 和 BIN 表示如何工作的最佳方式。

顺便说一下,如果您将 73 作为整数读取,那么此内存地址将 0100 1001 存储为二进制(如果它是无符号的),而 111 将存储为八进制,即以 8 为基数的数字表示形式。参见 http://coderstoolbox.net/number/

祝你好运