我一直致力于使用按位运算符(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;
}
答案 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/
祝你好运