![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 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. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
![]()
1 << i - сдвиг влево на i, т.е. получится число у которого в двоичном представлении будет один установленный бит - 10000000b->01000000b->и т.д. Т.е. получается маска. & - поразрядное "и".
0 & 1 = 0 1 & 1 = 0 Если соответстувующий бит установлен, то ( a & (1 << i) ) = 1 и следует вывод "1", в противном случае - "0".
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 30.08.2008
Сообщений: 4
|
![]()
1 & 1 = 1 вы имели ввиду?
Меня интересует каким образом он представляет a, т.е. к примеру если а = 15, в результате мы получим 00001111, каким образом он сравнивает 15 и ( 1 << i ). |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,089
|
![]()
побитово она сравнивает.
Я так понимаю это что-то вроде записи числа в двоичном виде? т.е. получается что мы смотрим установлен ли в числе a бит №7, если да, то выводим 1, иначе - 0, потом проверяем шестой бит, пятый и т.д. до нуля. Только int - это обычно 4 байта, а проверяется только один байт, т.е. число 10000 вы не обработаете правильно, если конечно я правильно понял код) |
![]() |
![]() |
![]() |
#5 |
Регистрация: 30.08.2008
Сообщений: 4
|
![]()
Т.е. изначально введенное число, компьютером воспринимается в двоичном виде? если так, тогда понятно.)
Верно, программка для чисел от 0 до 255.) Еще один небольшой вопрос - оператор исключающей конъюкции (^) работает каким образом? 0 ^ 1 = 1 0 ^ 0 = 0 1 ^ 1 = 0 верно я понял? Последний раз редактировалось trollik; 30.08.2008 в 23:52. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
![]()
Пардон, очепятолся.
Да, так.
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. |
![]() |
![]() |
![]() |
#7 |
Регистрация: 30.08.2008
Сообщений: 4
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод сортировки | 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 |