Как вывести двоичное значение переменной в C ++ - PullRequest
1 голос
/ 28 сентября 2010

У меня есть домашнее задание в моем классе программирования C ++, чтобы написать функцию, которая выводит двоичное значение значения переменной.

Так, например, если я установлю значение "a" вchar Я должен получить двоичное значение вывода "a".

Мой профессор C ++ не самый лучший в мире, и у меня возникают проблемы с тем, чтобы заставить мой код работать, используя загадочные примеры, которые он нам дал.Прямо сейчас мой код просто выводит двоичное значение 11111111 независимо от того, что я его тоже установил (если только его NULL, тогда я получу 00000000).

Вот мой код:

#include <iostream>

#define useavalue 1

using namespace std;

void GiveMeTehBinary(char bin);

     int main(){

     #ifdef useavalue
     char b = 'a';
     #else
     char b = '\0';   
     #endif 

     GiveMeTehBinary(b);

     system("pause");

     return 0;

     }

     void GiveMeTehBinary(char bin){

     long s;

     for (int i = 0; i < 8; i++){

         s = bin >> i;

         cout << s%2;

         }

         cout << endl << endl;


     }

Спасиботонна заранее, ребята.Вы всегда очень полезны:)

Редактировать: Исправлено сейчас - спасибо большое: D Проблема заключалась в том, что я не сохранял значение из сдвига битов.Я обновил код до его рабочего состояния выше.

Ответы [ 4 ]

6 голосов
/ 28 сентября 2010

Компилятор должен предупредить вас об определенных утверждениях в вашем коде, которые не действуют 1 . Рассмотрим

bin >> i;

Это ничего не делает, поскольку вы нигде не сохраняете результат этой операции.

Кроме того, почему вы объявили tehbinary как массив? Все, что вы когда-либо использовали, это один элемент (текущий). Было бы достаточно сохранить только текущий бит.

Некоторые другие вещи:

  • NULL должен использоваться только со значениями указателя. Ваше использование работает, но это не предполагаемое использование. То, что вы действительно хотите, это нулевой символ, то есть '\0'.
  • Пожалуйста, используйте настоящие, описательные имена. Я хорошо помню себя, используя переменные с именем tehdataz и т. Д., Но это действительно делает код трудным для чтения, и как только первоначальный забавный изнашивается, это раздражает как для вас, когда вы пытаетесь прочитать код, так и для тех, кто оценивает ваш код.
  • Правильное форматирование кода помогает понять многое: сделать отступ логичным и последовательным.

1 Если вы используете g++, всегда передавайте флаги компилятора -Wall -Wextra, чтобы получить полезную диагностику вашего кода.

1 голос
/ 28 сентября 2010

Попробуйте это:

#include <bitset>
#include <iostream>
int main()
{
    std::bitset<8>      x('a');
    std::cout << x << std::endl;
}
0 голосов
/ 28 сентября 2010
#include <iostream>
using namespace std;
int main(){
   int x = 255;

   for(int i = numeric_limits<int>::digits; i >=0; i--){
      cout << ((x & (1 << i)) >> i);
   }
}
0 голосов
/ 28 сентября 2010

Почему бы просто не проверить каждый бит в переменной unsigned char?

unsigned char b=0x80|0x20|0x01; //some test data
int bitbreakout[8];
if(b&0x80) bitbreakout[7]=1;
//repeat above for 0x40, 0x20, etc.
cout << bitbreakout;

Существует множество способов оптимизировать это, но это должно дать вам представление о том, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...