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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2008, 15:42   #1
trollik
 
Регистрация: 30.08.2008
Сообщений: 4
По умолчанию Вывод байта в двоичном представлении (С++)

Здравствуйте, объясните как работает выделенная строка:

#include <iostream>

main()
{
int a;
std::cin >> a;
for( int i = 7; i >= 0; i--)
if( a & (1 << i) )
std:: cout << "1";
else
std::cout << "0";
}

Спасибо.)

Последний раз редактировалось trollik; 30.08.2008 в 23:51.
trollik вне форума Ответить с цитированием
Старый 30.08.2008, 16:20   #2
drRobert
Пользователь
 
Аватар для drRobert
 
Регистрация: 07.08.2008
Сообщений: 33
По умолчанию

1 << i - сдвиг влево на i, т.е. получится число у которого в двоичном представлении будет один установленный бит - 10000000b->01000000b->и т.д. Т.е. получается маска. & - поразрядное "и".
0 & 1 = 0
1 & 1 = 0
Если соответстувующий бит установлен, то ( a & (1 << i) ) = 1 и следует вывод "1", в противном случае - "0".
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..."
(с) Б.Г.
drRobert вне форума Ответить с цитированием
Старый 30.08.2008, 20:14   #3
trollik
 
Регистрация: 30.08.2008
Сообщений: 4
По умолчанию

1 & 1 = 1 вы имели ввиду?

Меня интересует каким образом он представляет a, т.е. к примеру если а = 15, в результате мы получим 00001111, каким образом он сравнивает 15 и ( 1 << i ).
trollik вне форума Ответить с цитированием
Старый 30.08.2008, 22:32   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,089
По умолчанию

побитово она сравнивает.
Я так понимаю это что-то вроде записи числа в двоичном виде?
т.е. получается что мы смотрим установлен ли в числе a бит №7, если да, то выводим 1, иначе - 0, потом проверяем шестой бит, пятый и т.д. до нуля. Только int - это обычно 4 байта, а проверяется только один байт, т.е. число 10000 вы не обработаете правильно, если конечно я правильно понял код)
pu4koff вне форума Ответить с цитированием
Старый 30.08.2008, 23:46   #5
trollik
 
Регистрация: 30.08.2008
Сообщений: 4
По умолчанию

Т.е. изначально введенное число, компьютером воспринимается в двоичном виде? если так, тогда понятно.)
Верно, программка для чисел от 0 до 255.)
Еще один небольшой вопрос - оператор исключающей конъюкции (^) работает каким образом?
0 ^ 1 = 1
0 ^ 0 = 0
1 ^ 1 = 0
верно я понял?

Последний раз редактировалось trollik; 30.08.2008 в 23:52.
trollik вне форума Ответить с цитированием
Старый 31.08.2008, 21:33   #6
drRobert
Пользователь
 
Аватар для drRobert
 
Регистрация: 07.08.2008
Сообщений: 33
По умолчанию

Цитата:
Сообщение от trollik Посмотреть сообщение
1 & 1 = 1 вы имели ввиду?
Пардон, очепятолся.
Цитата:
Сообщение от trollik Посмотреть сообщение
Еще один небольшой вопрос - оператор исключающей конъюкции (^) работает каким образом?
0 ^ 1 = 1
0 ^ 0 = 0
1 ^ 1 = 0
верно я понял?
Да, так.
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..."
(с) Б.Г.
drRobert вне форума Ответить с цитированием
Старый 01.09.2008, 23:55   #7
trollik
 
Регистрация: 30.08.2008
Сообщений: 4
По умолчанию

Цитата:
Сообщение от drRobert Посмотреть сообщение
Да, так.
Хм, тогда по идее в данной программке если & заменить на ^ и ввести 15 должно вывестись 11110000? а выводится почему-то 11111111.(
trollik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод сортировки MaXiS Общие вопросы Delphi 5 19.05.2008 08:48
Необходимо представить десятичное число в двоичном виде Xardas Паскаль, Turbo Pascal, PascalABC.NET 2 26.01.2008 00:54
Delphi, вывод jpg north Помощь студентам 10 27.12.2007 05:45