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

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

08.01.2013, 21:51. Показов 2124. Ответов 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
2356 / 1774 / 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
2356 / 1774 / 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
2356 / 1774 / 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.01.2013, 19:27
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
i=sizeof(int)*8
а сдвиг на кол-во бит имеет смысл? Может:
C++
1
i=sizeof(int)*8-1
Или я что-то путаю?
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru