-2

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

该程序有一个固定的 4X4 矩阵,用户假设输入一个查询到程序 ANDing 两个 BINARY 数字,ORing 他们......等等

问题是“零前导”二进制数,例如:0111 显示为值 73,即使我设法用 setfill() 和 setw() 计算它我无法对实际二进制值执行按位运算!

注意:我尝试过使用字符串而不是整数,但按位运算仍然不适用。

例如:

如果我想 AND 两个二进制值让我们说 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;
}
4

2 回答 2

2

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

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

于 2015-12-03T19:24:34.763 回答
1

你的问题还不清楚。你说过你有 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/

祝你好运

于 2015-12-03T19:37:52.527 回答