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

Как работает & в данном сравнении - C++

Восстановить пароль Регистрация
 
mr_spec
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 26
01.03.2014, 11:09     Как работает & в данном сравнении #1
C++
1
2
3
4
5
6
7
8
void disp_binary(unsigned u)
{
    register int t;
 
    for(t = 128; t > 0; t = t/2)
        if(u & t) cout<<"1 "; // вот это не понятно
        else cout<<"0 ";
}
Что это за сравнение не могу понять. И почему одна &, а не две и что сравнивается в данном случае
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2014, 11:09     Как работает & в данном сравнении
Посмотрите здесь:

[C++]Теория.Почему в данном случае copy() не работает после reserve(),но работает после resize()? C++
Объясните, как в данном примере работает friend C++
Как проверить, принадлежит ли символ заданному диапазону m...n, кроме if (c <= n && c >= m) ? C++
C++ Объясните, как в данном примере работают виртуальные функции?
C++ Как происходит сортировка в данном блоке?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 1
01.03.2014, 11:13     Как работает & в данном сравнении #2
& - это побитовое И
если результат u & t не ноль, то cout<<"1 "
Цитата Сообщение от mr_spec Посмотреть сообщение
t = t/2
может лучше сдвиг?
mr_spec
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 26
01.03.2014, 11:17  [ТС]     Как работает & в данном сравнении #3
Цитата Сообщение от Croessmah Посмотреть сообщение
может лучше сдвиг?
Книгу Герберта Шилдта изучаю. У него такой код.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
01.03.2014, 12:34     Как работает & в данном сравнении #4
Цитата Сообщение от mr_spec Посмотреть сообщение
u & t
- побитовое И.
Если u=67= 010000112, то именно эта последовательность нулей и единиц выведется.
Когда t=128 =100000002 t&u=0
Когда t=64 =010000002 t&u=1000000 != 0
и т.д.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.03.2014, 12:44     Как работает & в данном сравнении #5
Имхо, лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <limits>
 
void disp_binary(unsigned u)
{
    for(unsigned t = 1 << (sizeof(t)*8-1); t; t >>= 1)
        std::cout << static_cast<bool>(u & t);
    std::cout << std::endl;        
}
 
int main() {
    
    disp_binary(std::numeric_limits<unsigned>::max());
    disp_binary(2863311530U);
    return 0;
}
http://ideone.com/n5RvYr
Yandex
Объявления
01.03.2014, 12:44     Как работает & в данном сравнении
Ответ Создать тему
Опции темы

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