带前导零的二进制数
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/
祝你好运
我一直在做一个作业,我必须在其中使用按位运算符 (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/
祝你好运