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

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

Восстановить пароль Регистрация
 
zewer
 Аватар для zewer
1018 / 709 / 71
Регистрация: 07.01.2011
Сообщений: 5,346
08.01.2013, 21:51     Сканирование с младшого до старшего бита на наличие 1 #1
Привет всем. Нужна помощь. Есть задание: Задано число А. Мне нужно сделать сканирование с младшого до старшего бита на наличие 1. А тепер проблема - подскажите пжл, как определить конец числа, или подсчитать к-во битов в числе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 21:51     Сканирование с младшого до старшего бита на наличие 1
Посмотрите здесь:

C++ Написать функцию целого типа, определяющую наличие в первой строке матрицы наличие седловой точки.
C++ Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита
C++ Определение младшего и старшего байта
Структуры. Найти самого старшего мужчину C++
Сумма младшего и старшего разряда C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.01.2013, 00:59     Сканирование с младшого до старшего бита на наличие 1 #2
Почитай про size_of(вроде так пишеться или слитно, давно не пользовался), это размер в битах(или байтах, если байтах, то просто умножить на 8) если не ошибаюсь.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.01.2013, 01:20     Сканирование с младшого до старшего бита на наличие 1 #3
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
для знаковых типов знаковый разряд не учитывается
zewer
 Аватар для zewer
1018 / 709 / 71
Регистрация: 07.01.2011
Сообщений: 5,346
09.01.2013, 01:33  [ТС]     Сканирование с младшого до старшего бита на наличие 1 #4
Цитата Сообщение от 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) если не ошибаюсь.
я вкурсе о этой ф-ии, она возвращает к-во байт. Попробую сделать, но не знаю ли получится то что надо.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
09.01.2013, 01:44     Сканирование с младшого до старшего бита на наличие 1 #5
Цитата Сообщение от 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);
zewer
 Аватар для zewer
1018 / 709 / 71
Регистрация: 07.01.2011
Сообщений: 5,346
09.01.2013, 01:50  [ТС]     Сканирование с младшого до старшего бита на наличие 1 #6
полное задание:
1.1 Побитовое сканирование в прямом (от младших к старшим) направлении regA в поисках бита с 1, возвращает номер позиции в destReg. Если 1 найдено ZF = 1, иначе ZF = 0
1.2 Побитовое сканирование в обратном направлении (от старших к младшим) regA в поисках бита с 1, возвращает номер позиции в destReg. Если 1 найдено ZF = 1, иначе ZF = 0

Это я делаю регистр признаки 0 - zero flax. Проблема в том, что надо вертеть число слева направо и справа налево...
П.С. нужно было сразу давать полное задание, чтото протупил...
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
09.01.2013, 01:59     Сканирование с младшого до старшего бита на наличие 1 #7
Так все же элементарно
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;
    }
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
09.01.2013, 01:59     Сканирование с младшого до старшего бита на наличие 1 #8
Цитата Сообщение от 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);
флаги я думаю сам раставишь
zewer
 Аватар для zewer
1018 / 709 / 71
Регистрация: 07.01.2011
Сообщений: 5,346
09.01.2013, 02:04  [ТС]     Сканирование с младшого до старшего бита на наличие 1 #9
спасибо, все понял, потом посмотрим что на практике будет...
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
09.01.2013, 18:24     Сканирование с младшого до старшего бита на наличие 1 #10
ValeryS, кхм. Что, говорите, вы курите?

C++
1
for(int i=sizeof(int)*8; i<=0; i--)
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
09.01.2013, 19:23     Сканирование с младшого до старшего бита на наличие 1 #11
Цитата Сообщение от 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);
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
09.01.2013, 19:27     Сканирование с младшого до старшего бита на наличие 1 #12
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
i=sizeof(int)*8
а сдвиг на кол-во бит имеет смысл? Может:
C++
1
i=sizeof(int)*8-1
Или я что-то путаю?
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
09.01.2013, 19:38     Сканирование с младшого до старшего бита на наличие 1 #13
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);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2013, 19:46     Сканирование с младшого до старшего бита на наличие 1
Еще ссылки по теме:

Как проверить наличие бита в байте C++
Наличие бита в байте C++
C++ Функция нахождения старшего и младшего байта

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
09.01.2013, 19:46     Сканирование с младшого до старшего бита на наличие 1 #14
Kgfq, у тебя тоже не все слава богу
число то задом наперед выводится
Yandex
Объявления
09.01.2013, 19:46     Сканирование с младшого до старшего бита на наличие 1
Ответ Создать тему
Опции темы

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