2015-12-03 2 views
-2

я работал над заданием, где я использовать битовые операторы (или, и, или нет)Двоичные числа с ведущими нулями

Программа имеет фиксированную матрицу 4X4 и пользователь предполагающих войти запрос к программе ANDing два бинарных номера, ORing их ... и т. д.

проблема - это двоичные числа с нулевым ведущим, например: 0111 показаны со значением 73 , даже когда мне удается отключить его с помощью setfill () и setw() Я не могу выполнить побитовую операцию по фактическому двоичному значению!

N.B: Я пытался использовать строки вместо int, но побитовая операция по-прежнему не применяется.

Для примера:

хочу ли я и два двоичных значений, скажем INT х = 1100 и INT у = 0100 в другом Int г г = х & у;

результат предполагают, чтобы быть 0100 Но результат, который появляется в 6

, который также является результатом, который появляется, если я пытался напечатать у на экран

#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

Пожалуйста, отправьте код. Кроме того, числовые литералы, начинающиеся с '0', являются« восьмеричными »на C++, а не бинарными. Итак, '73' - десятичный эквивалент восьмеричного' 111'. – PaulMcKenzie

+0

Манипулятор 'std :: dec' должен предотвращать восьмеричную интерпретацию. –

+2

Пожалуйста, напишите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –

ответ

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, представление октября, декабря, и БИН работает.

И, кстати, если вы читаете 73 как целое число, то этот адрес памяти хранит 0100 1001 как двоичный, если он неподписан, и 111 как восьмеричный, который представляет собой базовое число 8. См. http://coderstoolbox.net/number/

С наилучшими пожеланиями

2

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

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

+0

Это не работает ... есть ли определенная библиотека, которую я должен включить? –

+0

@ Rawan.S Нет, но ваш компилятор должен поддерживать C++ 14 –

Смежные вопросы