Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 11.09.2011, 11:21   #1
3dg_fan
Пользователь
 
Аватар для 3dg_fan
 
Регистрация: 26.12.2010
Сообщений: 38
Репутация: 10
По умолчанию является ли n-ый бит 1 или 0?

всем привет, пытаюсь решить вот это
на ввод идет число, нужно определить какой бит этого числа является 1,и вывести номер этих битов,
например число С=0110101
ответ 5,4,2,0
Код:

for (int c=0; c<(1<<n); c++)
{
    for (int i=0; i<n; i++)
        if(c & (1<<i) >0)
          cout<<i;
}
 учитель показал этот пример, но число вводится ведь не в двоичной системе, а в десятичной, то как определить n?
заранее спасибо :)

3dg_fan вне форума   Ответить с цитированием
Старый 11.09.2011, 11:27   #2
notHaker
Участник клуба
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 568
Репутация: 98
По умолчанию

дык i+1 это и будет номер битов.
__________________
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума   Ответить с цитированием
Старый 11.09.2011, 11:47   #3
3dg_fan
Пользователь
 
Аватар для 3dg_fan
 
Регистрация: 26.12.2010
Сообщений: 38
Репутация: 10
По умолчанию

notHaker, да, но вопрос в другом, сколько этих битов вообще в числе, например в пятерке три бита 101, ответ будет 2 и 0, если вводится 5
3dg_fan вне форума   Ответить с цитированием
Старый 11.09.2011, 11:56   #4
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,997
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

у типа int 32-бита вообще то.
и без разницы как вводится число, вы работаете с бинарным представлением в итоге(двоичная ссч) а не с десятичным как обычно.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 11.09.2011, 12:00   #5
notHaker
Участник клуба
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 568
Репутация: 98
По умолчанию

Ну и? А если там 20 битов и 0 и 2 также выставленны в единицу, то ответ будет другим? Без разницы, сколько там битов, главное что есть условие
Код:

if(c & (1<<i) >0)

с помощью которого можно выводить номер единичного бита или писать в массив его позицию - без разницы.
__________________
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума   Ответить с цитированием
Старый 11.09.2011, 12:18   #6
SnX
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 114
Репутация: 78
По умолчанию

Код:

   
    int value = 5;
    for ( int i = 0; i < sizeof( value ) * 8; ++i )
        if ( value & ( 1 << i ) ) cout << i << endl;

SnX вне форума   Ответить с цитированием
Старый 11.09.2011, 12:36   #7
3dg_fan
Пользователь
 
Аватар для 3dg_fan
 
Регистрация: 26.12.2010
Сообщений: 38
Репутация: 10
По умолчанию

SnX, то что нужно, спасибо) забыла про sizeof() совсем, можно и без умножения на 8
3dg_fan вне форума   Ответить с цитированием
Старый 11.09.2011, 12:38   #8
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,997
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

нельзя без умножения, sizeof дает размер в байтах, а вам надо в битах.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка - "не является допустимым именем входа или отсутствует разрешение." maxflint БД в Delphi 0 12.05.2011 21:16
бит имейдж или канва? чтоподходит лутше? electrovolk Помощь студентам 1 15.01.2011 15:22
null или не является объектом MrJenika JavaScript, Ajax 4 07.05.2010 11:23
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 14:38
Проверка, является ли поле Memo пустым или нет. Ветас Помощь студентам 1 24.02.2008 13:47


10:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru