Форум программистов, компьютерный форум CyberForum.ru

Поразрядный оператор И, и его работа - C++

Восстановить пароль Регистрация
 
Вальдемар
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
29.08.2012, 23:37     Поразрядный оператор И, и его работа #1
C++
1
2
3
4
5
6
void disp(unsigned u){
    for(int t = 128; t > 0; t = t/2)
        if(u & t)cout << "1 ";
        else
            cout << "0 ";
    cout << endl;
Скажем "u = 1", далее - переобразование: 0000 0001 & 1000 0000, 0100 0000, 0010 0000, 0001 0000,
0000 1000, 0000 0100, 0000 0010, 0000 0001, цикл завершон.
Самое интересное как оператор переобразует, сравнивает и выводит на экран << 0000 0001 ?
Или я чтото непонимаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 23:37     Поразрядный оператор И, и его работа
Посмотрите здесь:

C++ оператор system и его специфика
что такое trunc в pascal и на какой оператор его заменить в С++?? C++
Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки C++
Дана матрица размера M × N. Для каждого столбца матрицы с четным номером (2, 4, …) найти сумму его элементов. Условный оператор не использовать. C++
Как выглядеть оператор, если по номеру дня недели необходимо написать его название C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
30.08.2012, 00:24     Поразрядный оператор И, и его работа #2
if (u & t) читается как if ((u & t) != 0).

t — это маска из одного движущегося бита. То есть u & t == 0, когда равен нулю бит u на том же месте, где единичка в t; а u & t != 0, когда в u на том же месте единичный бит.
TopLoader
 Аватар для TopLoader
41 / 41 / 4
Регистрация: 10.12.2011
Сообщений: 128
30.08.2012, 00:34     Поразрядный оператор И, и его работа #3
Суть приведенного вами алгоритма в том, что операция побайтового И используется для перевода числа из десятичной системы в двоичную. Число 128 -- это 27, то есть 10000000 в двоичной системе. Результат операции И будет 1, только если оба операнда 1. Следовательно, выполняя побайтовое И для числа 10000000 и некоего числа XYZABCDE в результате мы получим значение первой цифры в числе (то есть X), ведь 1 И X = X, а в остальных разрядах сравнивается некая цифра с нулем -- результат будет всегда нулевым. Т.е. на первой итерации цикла мы узнали, есть ли единица на позиции такой-то в двоичной записи числа.
Далее t делится на 2, т.е. двоичная запись t становиться 1000000 -- "на один ноль меньше", чем у предыдущего. Единица стоит в меньшем разряде. Выполняя побитовое И узнаем значение уже бита Y.
И так далее, поэтапно поразрядно сравнивая наше число со степенями двойки. Если есть значение, выводим 1, иначе -- 0.


Не по теме:

Надеюсь, получилось более-менее понятное пояснение

Вальдемар
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
30.08.2012, 01:09  [ТС]     Поразрядный оператор И, и его работа #4
Правельно ли я понял?
Цикл:
0000 0001 - 1
1000 0000 - 128 // 0 и 1 будет 0 - выводит 0

0000 0001 - 1
x100 0000 - 64 // 0 и 1 будет 0 - выводит 0

0000 0001 - 1
xx10 0000 - 32 // 0 и 1 будет 0 - выводит 0

0000 0001 - 1
xxx1 0000 - 16 // 0 и 1 будет 0 - выводит 0

0000 0001 - 1
xxxx 1000 - 8 // 0 и 1 будет 0 - выводит 0

0000 0001 - 1
xxxx x100 - 4 // 0 и 1 будет 0 - выводит 0

0000 0001 - 1
xxxx xx10 - 2 // 0 и 1 будет 0 - выводит 0

0000 0001 - 1
xxxx xxx1 - 1 // 1 и 1 будет 1 - выводит 1
конец цикла
на зкране: 0 0 0 0 0 0 0 1
TopLoader
 Аватар для TopLoader
41 / 41 / 4
Регистрация: 10.12.2011
Сообщений: 128
30.08.2012, 20:03     Поразрядный оператор И, и его работа #5
Вальдемар, да, именно таким образом оно и работает
Yandex
Объявления
30.08.2012, 20:03     Поразрядный оператор И, и его работа
Ответ Создать тему
Опции темы

Текущее время: 23:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru