Я работал над присваиванием, где я должен использовать побитовые операторы для (ИЛИ, И или НЕ)
Программа имеет фиксированную матрицу 4X4, и пользователь предполагает ввести запрос к программе И два двоичных числа, ИЛИ их … и т. д.
проблема заключается в двоичных числах с нулевым начальным значением, например: 0111 показаны со значением 73
даже когда мне удается это сделать с помощью setfill () и setw ()
Я не могу выполнить побитовую операцию с действительным двоичным значением!
Н.Б .: Я пробовал строки вместо целых, но побитовая операция все еще не применяется.
Например:
если я хочу и два двоичных значения, скажем,
int x = 1100 и int y = 0100 в другом int z
г = х;
результат должен быть 0100
Но результат, который появляется 64
что также результат, который появляется, если я попытался вывести у на экран
#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х4, что это за матрица или двумерный массив? Так что, может быть, вы можете уточнить подробнее.
Что касается работы с двоичными файлами, ученики обычно смущаются из-за того, что если вы используете целочисленные переменные, вы можете использовать побитовую манипуляцию над этими переменными, и результат все равно будет читаться как целочисленный формат. И если вам случается искать, что происходит во время побитовой манипуляции, и визуализировать процесс, вы всегда можете использовать 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/
Удачи
Когда ты пишешь 0111
в вашем коде компилятор будет считать, что он восьмеричный, поскольку восьмеричные числа начинаются с нуля. Если вы написали 111
это будет десятичное число.
C ++ 14 добавил двоичный буквенный префикс, чтобы вы могли писать 0b111
чтобы получить то, что вы хотите.