Двоичные числа с ведущими нулями

Я работал над присваиванием, где я должен использовать побитовые операторы для (ИЛИ, И или НЕ)

Программа имеет фиксированную матрицу 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;
}

-2

Решение

Ваш вопрос до сих пор неясен. Вы сказали, что у вас матрица 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/

Удачи

1

Другие решения

Когда ты пишешь 0111 в вашем коде компилятор будет считать, что он восьмеричный, поскольку восьмеричные числа начинаются с нуля. Если вы написали 111 это будет десятичное число.

C ++ 14 добавил двоичный буквенный префикс, чтобы вы могли писать 0b111 чтобы получить то, что вы хотите.

2

По вопросам рекламы [email protected]