Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
#1

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

29.08.2012, 23:37. Просмотров 468. Ответов 4
Метки нет (Все метки)

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 ?
Или я чтото непонимаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 23:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поразрядный оператор И, и его работа (C++):

Изменить программу так, чтобы выполнялось задание, но не использовался поразрядный оператор ^ - C++
#include &lt;iostream&gt; using namespace std; int slog(int n, int m); int main() { setlocale(LC_ALL, &quot;rus_rus.1251&quot;); int n, m; ...

Оператор приведения и его объявление - C++
Всем привет! Прошу помощи в разъяснении теории: Есть класс А и B, в классе B есть оператор приведения к А, а в классе А...

оператор system и его специфика - C++
Здравствуйте!в dev c++ есть оператор system.если я например пишу system(&quot;c:\qwer\w.exe&quot;); то из папки qwer открывается файл w.exe.а как...

что такое trunc в pascal и на какой оператор его заменить в С++?? - C++
... REPEAT m1:=int(w1/h); m:=trunc(m1); for j:=1 to m do begin ...

Оператор switch: по введенному числу определить последнюю цифру его квадрата - C++
Здравствуйте,помогите с написанием программы:Написать программу c помощью оператора switch, которая по введенному числу определяет...

Как выглядеть оператор, если по номеру дня недели необходимо написать его название - C++
Оператор выбора switch. Написать пример, как будет выглядеть этот оператор, если по номеру дня недели необходимо написать его название.

4
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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 на том же месте единичный бит.
0
TopLoader
42 / 42 / 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.


Не по теме:

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

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
0
TopLoader
42 / 42 / 4
Регистрация: 10.12.2011
Сообщений: 128
30.08.2012, 20:03 #5
Вальдемар, да, именно таким образом оно и работает
1
30.08.2012, 20:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2012, 20:03
Привет! Вот еще темы с ответами:

Оператор преобразования типа и его эквивалентные замены, поиск строки в текстовом файле , содержащей заданный - C++
Господа, был бы очень признателен если бы кто то помог ответить на вапросы http://cs616225.vk.me/v616225102/122f8/5kAaFEGoDn0.jpg

Получить слово, получаемое путем прочтения слова s начиная с его конца(оператор цикла с параметром) - C++
1)Дано слово s.Получить слово t,получаемое путем прочтения слова s начиная с его конца(оператор цикла с параметром)

Что делает оператор init в данной ситуации (работа с двумерными массивами) - C++
Есть фрагмент кода C++. const int ROWS = 10, COLUMNS = 10; int matrix; init(&amp;matrix); int temp, sum = 0;

Дана матрица размера M × N. Для каждого столбца матрицы с четным номером (2, 4, …) найти сумму его элементов. Условный оператор не использовать. - C++
Дана матрица размера M × N. Для каждого столбца матрицы с четным номером (2, 4, …) найти сумму его элементов. Условный оператор не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru