Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342

Сканирование с младшого до старшего бита на наличие 1

08.01.2013, 21:51. Показов 2146. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Нужна помощь. Есть задание: Задано число А. Мне нужно сделать сканирование с младшого до старшего бита на наличие 1. А тепер проблема - подскажите пжл, как определить конец числа, или подсчитать к-во битов в числе?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2013, 21:51
Ответы с готовыми решениями:

Позиция старшего значащего бита
Нет ли в стандартной библиотеке готовой функции находящей позицию старшего единичного бита числа? Именно готовой функции, в идеале...

Обнуление старшего ненулевого бита числа
Добрый день, необходимо обнулить старший ненулевой бит числа, я вроде бы делаю все правильно, но код работает только для чисел не...

Определите четность числа по анализу старшего бита, используя объединение с битовыми полями
Используя объединение с битовыми полями, определите четность беззнакового целого числа по анализу старшего бита (операцию деления с...

13
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
09.01.2013, 00:59
Почитай про size_of(вроде так пишеться или слитно, давно не пользовался), это размер в битах(или байтах, если байтах, то просто умножить на 8) если не ошибаюсь.
1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
09.01.2013, 01:20
C++
1
2
3
4
5
6
#include <limits>
 
std::numeric_limits<int>::digits
std::numeric_limits<unsigned>::digits
std::numeric_limits<char>::digits
//etc
для знаковых типов знаковый разряд не учитывается
1
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
09.01.2013, 01:33  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
2
3
4
5
6
#include <limits>
 
std::numeric_limits<int>::digits
std::numeric_limits<unsigned>::digits
std::numeric_limits<char>::digits
//etc
для знаковых типов знаковый разряд не учитывается
ничего не понял...
можете об'яснить поподробней?

Добавлено через 1 минуту
Цитата Сообщение от Wolkodav Посмотреть сообщение
Почитай про size_of(вроде так пишеться или слитно, давно не пользовался), это размер в битах(или байтах, если байтах, то просто умножить на 8) если не ошибаюсь.
я вкурсе о этой ф-ии, она возвращает к-во байт. Попробую сделать, но не знаю ли получится то что надо.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.01.2013, 01:44
Цитата Сообщение от zewer Посмотреть сообщение
Задано число А. Мне нужно сделать сканирование с младшого до старшего бита на наличие 1
нашли а дальше что?
C++
1
2
3
4
5
6
7
8
while(n)// крутим пока число не равно 0
{
if(n%2)
// что то делаем если бит равен 1 
else
// что то делаем если бит равен 0
n/=2;// готовим следующий бит
}
Добавлено через 5 минут
ищем первую единицу и отваливаем
C++
1
2
3
4
5
6
7
8
9
10
11
12
int i=-1;
while(n)// крутим пока число не равно 0
{
i++; 
if(n%2)
  break;
n/=2;
}
if(i<0)
  printf("Нет едениц");
else
 printf("Единица в %d разряде",i);
1
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
09.01.2013, 01:50  [ТС]
полное задание:
1.1 Побитовое сканирование в прямом (от младших к старшим) направлении regA в поисках бита с 1, возвращает номер позиции в destReg. Если 1 найдено ZF = 1, иначе ZF = 0
1.2 Побитовое сканирование в обратном направлении (от старших к младшим) regA в поисках бита с 1, возвращает номер позиции в destReg. Если 1 найдено ZF = 1, иначе ZF = 0

Это я делаю регистр признаки 0 - zero flax. Проблема в том, что надо вертеть число слева направо и справа налево...
П.С. нужно было сразу давать полное задание, чтото протупил...
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
09.01.2013, 01:59
Так все же элементарно
sizeof - и ты знаешь, сколько бит в числе
циклом пробегаешься по всем, с помощью побитового сдвига и битового "и"

C++
1
2
3
4
5
6
7
int number = 256, bit = 1;
    for(unsigned int i = 1; i <= sizeof(number) * 8; ++i)
    {
        cout << (number & bit);
        if(i % 8 == 0) cout << " ";
        number >>= 1;
    }
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.01.2013, 01:59
Цитата Сообщение от zewer Посмотреть сообщение
1.1 Побитовое сканирование в прямом (от младших к старшим) направлении regA в поисках бита с 1, возвращает номер позиции в destReg. Если 1 найдено ZF = 1, иначе ZF = 0
Это я тебе сделал
Цитата Сообщение от zewer Посмотреть сообщение
Побитовое сканирование в обратном направлении (от старших к младшим) regA в поисках бита с 1, возвращает номер позиции в destReg. Если 1 найдено ZF = 1, иначе ZF = 0
C++
1
2
3
4
5
6
7
8
9
for(int i=sizeof(int)*8; i<=0; i--)
{
 if(n&(1<<i))
  break;
}
if(i<0)
  printf("Нет едениц");
else
 printf("Единица в %d разряде",i);
флаги я думаю сам раставишь
1
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
09.01.2013, 02:04  [ТС]
спасибо, все понял, потом посмотрим что на практике будет...
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
09.01.2013, 18:24
ValeryS, кхм. Что, говорите, вы курите?

C++
1
for(int i=sizeof(int)*8; i<=0; i--)
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.01.2013, 19:23
Цитата Сообщение от Kgfq Посмотреть сообщение
ValeryS, кхм. Что, говорите, вы курите?
ну и описался немного (время поста то посмотри) идея то не потерялась
там кстати и i нельзя в цикле объявлять
вот рабочий цикл
C++
1
2
3
4
5
6
7
8
9
10
int i;
 for(i=sizeof(int)*8; i>=0; i--)
  {
    if(n&(1<<i))
     break;
   }
if(i<0)
  printf("Нет едениц");
else
 printf("Единица в %d разряде",i);
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.01.2013, 19:27
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
i=sizeof(int)*8
а сдвиг на кол-во бит имеет смысл? Может:
C++
1
i=sizeof(int)*8-1
Или я что-то путаю?
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.01.2013, 19:38
Croessmah,
ты прав, просто не проверял сейчас проверил да сдвиг на 32 бита не есть гут( у меня по крайней мере идет заворот)
1<<32 =1 циклический сдвиг однако хотя по моему поведение не определено
вот так правильно

C++
1
2
3
4
5
6
7
8
9
10
int i;
 for(i=sizeof(int)*8-1; i>=0; i--)
  {
      if(n&(1<<i))
     break;
   }
if(i<0)
  printf("Нет едениц");
else
 printf("Единица в %d разряде",i);
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.01.2013, 19:46
Kgfq, у тебя тоже не все слава богу
число то задом наперед выводится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2013, 19:46
Помогаю со студенческими работами здесь

Наличие бита в байте
Подскажите, правильна ли реализация проверки наличия бита в байте #define MARK 0x02 .. if (dataRead &amp; MARK) {...

Как проверить наличие бита в байте
Здравствуйте!! Собственно вопрос, можно ли как нибудь записать условие if на проверку бита в байте(D0 D1 D2 D3 D4 D5 D6 D7)?? Смысл в...

Функция, которая для заданного числа рассчитывает позицию первого слева (старшего) нулевого бита числа
Написать функцию, которая для заданного числа х рассчитывает позицию первого слева (старшего) нулевого бита числа

В двоичном представлении инвертировать все одиночные единицы, кроме старшего бита
В двоичном представлении инвертировать все одиночные единицы, кроме старшего бита.

В двоичном представлении инвертировать все одиночные единицы, кроме старшего бита
В двоичном представлении инвертировать все одиночные единицы ,кроме старшего бита.


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru