带前导零的二进制数

时间:2015-12-03 19:17:13

标签: c++ binary leading-zero

我一直致力于使用按位运算符(OR,AND或NOT)的作业

程序有一个固定的4X4矩阵,用户可以在程序中输入一个查询和两个二进制数字,或者对它们进行运算...等等

问题是"零领先"二进制数例如:0111显示为值73 即使我设法使用setfill()和setw()来管理它 我无法对实际二进制值执行按位运算!

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

例如:

如果我想和两个二进制值让我们说 在另一个int z中,int x = 1100,int y = 0100 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;
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您的问题仍然不明确。你说你有4x4矩阵,它是什么类型的矩阵或2D数组?所以也许你可以详细说明。

关于处理二进制文件,学生通常会混淆的是,如果使用整数变量,则可以对这些变量使用按位操作,结果仍将作为整数格式读取。如果您碰巧在按位操作期间查看正在发生的事情并可视化该过程,您可以始终使用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/

祝你好运