|
0 / 0 / 0
Регистрация: 15.08.2017
Сообщений: 9
|
|
Сколько установлено пар бит в числе15.08.2017, 23:03. Показов 3157. Ответов 14
Метки нет (Все метки)
Добрый день, учу си, попросили написать программу, которая будет выводить, сколько пар бит в целом числе.
Например есть число 57, которое выглядит как: 00111001, то есть две пары идущих друг за другом единиц. Нужно вывести их. Мне предложили использовать сдвиг, но я не знаю, какой именно нужен алгоритм действий для результата.
0
|
|
| 15.08.2017, 23:03 | |
|
Ответы с готовыми решениями:
14
Замена бит в числе формата float
|
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
||||||||
| 16.08.2017, 04:48 | ||||||||
0
|
||||||||
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
||||||
| 16.08.2017, 09:58 | ||||||
Сообщение было отмечено Dendii как решение
Решение
Dendii, а что, хорошая задачка. Учит низкоуровневой работе с числами и манипуляциям с битами. Такие задачи ещё на ассемблере интересно решать. Ты, правда, не очень хорошо сформулировал условие. Не очень понятно, что нужно выводить — сосчитанное количество пар соседних единичных бит, или нужно выводить сами пары, что вряд ли, ибо не имеет особого смысла. Наверное, всё-таки первое — т. е. нужно сосчитать, сколько раз единичные биты стоят друг с другом рядом во введённом числе, и вывести количество таких пар.
Написал маленькую программку, которая считывает целое число в обычном десятичном виде, выводит его же в двоичном представлении, а потом считает количество пар рядом стоящих друг за другом единичных бит и число этих пар также выводит в виде сообщения. Программка подробно прокомментирована, так что можно разобраться, что она делает. Единственный её недостаток, что для ввода числа она использует функцию scanf(), что не очень надёжно, поскольку эта функция плохо позволяет проанализировать ошибки ввода и не все их позволяет проанализировать. Лучше для этой цели использовать функцию fgets() в паре со strtol(). strtol() позволяет при желании проанализировать все ошибки при вводе целого и несоответствие введённой строки формату десятичного целого числа, но это важно при написании надёжных программ. Для учебной программы вполне хватит scanf(). Ну и гарантировать отсутствие ошибок в ней тоже не могу, хотя запускал — вроде работает. И последнее. Если будешь показывать её преподавателю, мой тебе совет, бОльшую часть комментариев из неё убери, а те, что оставишь, сократи, потому что с этими комментариями она очень странно и подозрительно будет смотреться. Он поймёт, что написал её кто-то другой, а не ты. Зато по ним легко можно разобраться с логикой работы программки. Ну и, конечно, Керниган с Ритчи в помощь. В этом учебнике есть всё необходимое для начинающего сишного программиста. И текст самой программы.
Та же программа, во вложении. bitpairs.rar
2
|
||||||
|
0 / 0 / 0
Регистрация: 15.08.2017
Сообщений: 9
|
|
| 16.08.2017, 13:05 [ТС] | |
|
JohnyWalker, огромное спасибо за помощь!
Более менее разобрался, укорачиваю комментарии и буду предъявлять преподу
0
|
|
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
|
| 16.08.2017, 13:20 | |
|
И отлично
0
|
|
|
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
|
|||||||
| 16.08.2017, 14:09 | |||||||
0
|
|||||||
|
Модератор
|
|||||||||||||||||||||
| 21.08.2017, 18:04 | |||||||||||||||||||||
|
JohnyWalker,
не проще было за (n-1) сдвиг проверить m&3==3?
Или для знакового аргумента:
Для беззнакового можно также
3
|
|||||||||||||||||||||
|
Неэпический
|
||||||
| 21.08.2017, 20:09 | ||||||
|
gcc:
1
|
||||||
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
||
| 24.08.2017, 03:58 | ||
|
1
|
||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
||||||
| 24.08.2017, 15:54 | ||||||
0
|
||||||
|
Модератор
|
|
| 24.08.2017, 16:02 | |
|
easybudda,
невыгодно. Ради байта городить массив из 7 байт, и это при том, что ту же самую маску можно получить как m=3; m<<=1; Да и на бОльшие размеры решение с маской легче масштабируется.
0
|
|
|
Неэпический
|
||
| 24.08.2017, 18:04 | ||
![]() Для знаковых не подойдет, а для беззнаковых чуть поменять код надо.
0
|
||
| 24.08.2017, 18:04 | |
|
Помогаю со студенческими работами здесь
15
Сколько бит займет такое определение
Сколько 0 содержится в числе? Посчитать сколько установлено разного ПО в организации и у кого оно установлено Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|