![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Пользователь
Регистрация: 08.04.2012
Сообщений: 10
|
![]()
Добрый вечер, форумчане, нужна ваша помощь, никак не могу додуматься, как сделать это задание:
Цитата:
Задание нужно выполнить на чистом Си. Вот мои наработки: Код:
Надеюсь на вашу помощь! |
|
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,323
|
![]() Код:
Нумерация битов от младшего к старшему, начиная с 0 (справа налево, если смотреть на текстовое представление).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 08.04.2012
Сообщений: 10
|
![]()
исходное задание делается для типа данных double(long doble)
В вашем коде, при попытке ввода числа 15.375 наблюдаю такую картину наблюдаю такую картину Последний раз редактировалось doojkee; 17.03.2013 в 22:56. |
![]() |
![]() |
![]() |
#4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,323
|
![]()
Я думал, что использование double, просто Ваша прихоть.
Предыдущий код работает только с целыми числами. Код:
Разберу способ на предыдущем коде. Если нужно поставить k-й бит в единицу, то получаем число с k-м единичным битом и остальными нулями (1 << k). Затем делаем побитовое "или" с исходным числом, тем самым "поднимая" требуемый бит. Если нужно, наоборот, опустить k-й бит, то нужно создать битовую маску из единиц, в которой на месте требуемого бита будет 0. Сначала получаем число, в котором на k-ом месте стоит единица, затем инвертируем биты и получаем требуемую маску. Побитовое "и" "опустит" k-й бит.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 17.03.2013 в 22:58. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 08.04.2012
Сообщений: 10
|
![]()
Если вам не сложно, не могли бы прокомментировать данный цикл, что в нем происходит и каким образом!
Код:
Код:
Желательно поподробней, спасибо! Я просто только учусь программировать на Си, поэтому для меня многие моменты не до конца ясны. Последний раз редактировалось doojkee; 17.03.2013 в 23:24. |
![]() |
![]() |
![]() |
#6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,323
|
![]()
Во-первых, не цитируйте полностью такие длинные сообщения.
Во-вторых, само объяснение: ![]() Верхняя строка - то, как мы привыкли видеть нумерацию битов в числе, когда записываем их на бумаге. Нижняя строка - как на самом деле будут храниться байты в памяти (так называемый little-endian - порядок от младшего к старшему). То есть первый (нулевой в нумерации Си) байт массива "а" будет хранить самый младший байт числа "m". Для вывода числа мы идем циклом от самого большого номера бита к самому маленькому. Нам нужно брать правильный бит из правильного байта. По картинке несложно заметить, что целая часть от номера i указывает на требуемый байт, а остаток - на нужный бит. UPD Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 17.03.2013 в 23:22. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 08.04.2012
Сообщений: 10
|
![]()
Прошу прощения за тупые вопросы, но все же хочу до конца разобраться!
(i%8), что это операция? Операции |= и &=, интерпретируются так как и +=? Последний раз редактировалось doojkee; 17.03.2013 в 23:29. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
BDA, прикалываешься что-ли?
В "чистом C нет++). Это С++ ![]() Для "чистого" С, a = a+1; ![]()
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 17.03.2013 в 23:28. |
![]() |
![]() |
![]() |
#9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,323
|
![]()
doojkee, i%8 - остаток i от деления на 8.
|= и &= работают также (одинаковая семантика, вроде так это называется ![]() Smitt&Wesson, честно говоря, первый раз такое слышу - полтора года пишу ++, компилирую в gcc и думаю, что пишу на чистом Си.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 17.03.2013 в 23:38. |
![]() |
![]() |
![]() |
#10 | |
Пользователь
Регистрация: 08.04.2012
Сообщений: 10
|
![]() Цитата:
Последний тупой вопрос, для чего мы проверяем на остаток делания на 8? |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Битовые операции(с++) | Lazy maximka | Помощь студентам | 2 | 23.12.2010 18:55 |
Битовые операции СИ | savra | Помощь студентам | 0 | 10.03.2010 19:31 |
Битовые операции | ("")(Э_Є)("") | Общие вопросы C/C++ | 4 | 03.07.2009 19:15 |
Битовые операции | DrAlexx2121 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 14.06.2008 22:26 |