Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 17:04   #1
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
Вопрос Вывод побитовый преобразований

Вот мой код. В результате вывод строку из 32х символов. Вопрос: как сделать чтобы символы выводились с пробелом, каждые 4 символа. То есть не так 11111110000000000000000000000000, а так 1111 1110 0000 0000 0000 0000 0000 0000

Код:
#include <iostream>

using namespace std;

void PrintBit( int a, const char *s );
const int SizeBit = sizeof(int) * 8;


int main()
{
    int x, y, m, n;

    cout << "Input x = ";
    cin >> x;

    cout << "Input y = ";
    cin >> y;

    cout << "Input n = ";
    cin >> n;

    cout << "Input m = ";
    cin >> m;
    cout << "\n";


    PrintBit( x, "X");
    PrintBit( y, "Y");
    cout << "\n";

    unsigned M_Junior = ~0 << (SizeBit - n);
    PrintBit( M_Junior, "M_Junior");
    unsigned M_Elder = M_Junior >> (SizeBit - n - m);
    PrintBit( M_Elder, "M_Elder");
    cout << "\n";

    unsigned X_Change = x & (~M_Elder);
    PrintBit( X_Change, "X_Change ");
    unsigned Y_Change = (y & M_Elder);
    PrintBit( Y_Change, "Y_Change");
    cout << "\n";

    unsigned X_New = Y_Change | X_Change ;
    PrintBit( X_New, "X_New - Result");
    unsigned mask = ~0 << (SizeBit - 6);
    unsigned Y_New = y | mask;
    PrintBit ( Y_New, "Y_New - Result");

    return 0;
}

void PrintBit( int a, const char *s )
    {
      for( unsigned mask = 1 << (SizeBit -1); mask; mask >>= 1)
        cout << (a & mask ? '1' : '0');
        cout << ' ' << s << "\n";
}
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.

Последний раз редактировалось Stilet; 18.09.2010 в 17:57.
EddieG вне форума Ответить с цитированием
Старый 18.09.2010, 18:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Без обид. твой пример мне не оч. нравится, потому предложу свое видение ситуации:
Код:
      
{
	int i=856;
      for(int k=1;k<=(sizeof(i)*8); i >>= 1,k++){
        cout << (i & 1)? '1' : '0';
		if(!(k%4))cout << ' ';
	  }
	  getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.09.2010, 17:18   #3
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
По умолчанию

Спасибо. Вот еще вариант:

Код:
1

void  PrintBit(unsigned a)
{
    int i, z;
    unsigned int mask;
    int s = sizeof(int)*8;

    mask = mask << s - 1;
    for(i=0, z=0; i<s;i++,z++)
     {
        if(z==4){cout<<" ";z=0;}
        if((a& mask)==0)
        cout << "0";

        else

        cout << "1";
        mask = mask >> 1;
    }
}
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.
EddieG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование методом аналитических преобразований Margosha89 Помощь студентам 0 31.05.2010 16:04
Шифрование методом аналитических преобразований! Margosha89 PHP 7 31.05.2010 11:49
Побитовый сдвиг Belii09878 Помощь студентам 10 02.02.2010 14:46
Вывод массива после некоторых преобразований в С++ xnise Помощь студентам 8 05.12.2009 12:13
C++ побитовый сдвиг KOLYTFR Помощь студентам 1 03.06.2009 22:42