|
13 / 13 / 1
Регистрация: 06.02.2010
Сообщений: 19
|
|||||||||||
Странное поведение (сдвиг)06.02.2010, 15:29. Показов 1004. Ответов 8
Метки нет (Все метки)
Здравствуйте.Прошу помочь с задачкой.
Программа , должна "сдвигать" данные в один бит(128), но при вызове функции с разными параметрами, выводит дублирующиеся значения результатов. Суть проблемы: Не воспринимается изменение входящих параметров: этот кусок программы выводит белиберду такого вида.... !!!!!!54 : 0 SHIFT byte:54////////54-55 дубляж ! , но ведь значения функция принимает разные в каждом случае. 0011011 !!!!!!55 : 0 SHIFT byte:55 0011011 !!!!!!56 : 0 SHIFT byte:56/////////56-57 дубляж ! !!!!!!57 : 0 SHIFT byte:57 0011100 ........................................ .... !!!!!!126 : 0 SHIFT byte:126///////////////////////126-127 дубляж ! Почему так ? 0111111 !!!!!!127 : 0 SHIFT byte:127 0111111 !!!!!!128 : 128 SHIFT byte:128 1000000// С чего вдруг , он соизволил вывести правильно ? Press any key to continue //////////////// А вот и исходник этой "беды"......
Добавлено через 21 минуту Если интересно.... Так сейчас выглядит сама функция вывода адреса в порт.
0
|
|||||||||||
| 06.02.2010, 15:29 | |
|
Ответы с готовыми решениями:
8
Странное поведение new Странное поведение
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|||||||
| 06.02.2010, 19:07 | |||||||
|
На редкость кривой способ написания кода.
А не работает понятно почему, должно быть так:
а возможно что выводить нужно от младшего к старшему.
1
|
|||||||
|
13 / 13 / 1
Регистрация: 06.02.2010
Сообщений: 19
|
|
| 06.02.2010, 19:30 [ТС] | |
|
Тут всё дело в том , что адрес ,который передается в последовательном виде таким вот смещением - это семь(7)бит.Именно задом на перед.Ошибки там нет , и не спорю , в байте 8 бит (0-7).
Просто микросхема предоставляет в том режиме 128 ячеек для записи/чтения (а0-а6). А в другом (16х) - и того меньше (64 ячейки). Код я ровным не считаю это просто пример. Будем исправляться. Добавлено через 11 минут Буду очень признателен , если укажете , как не писать коряво. Понимаю , что именно в таких условиях баги лучше всего лезут. Еще раз спасибо.
0
|
|
|
13 / 13 / 1
Регистрация: 06.02.2010
Сообщений: 19
|
|
| 07.02.2010, 03:21 [ТС] | |
|
Да ,конечно же.
Мне нужен кусок кода, который введеное значение (0<= число <=127) переводит в последовательность бит , его составляющих... НО левый("старший") бит идет первым. Так , бит за битом переходим к выбору последовательности действий. если 0 - то одни ;если 1-ца - другие... Я сделал так: выполняю логическое "и" по маске 128(извините , если не так выражаюсь)-т.е с 6-м битом(первый ведь 0 ?) -- & -- со значением адреса , которое с каждой итерацией "сдвигается" влево. Естественно , что если подставленный бит ,в уже смещенном адресе, установлен .... получаем еденицу на опреции сранения...(у меня в ифах) и выполняем соответств. действия.Так и с нулем. Я понимаю , что можно и проще - например делить 128 на 2 ,пока >1 в каждой итерации и будем получать новую маску.(у меня всего 7 бит надо выделить =7 масок) Тогда адрес не трогаем... опять сравниваем... Так 7(семь =)) раз - такова специфика задачи (я выше писал про память на 93с46) . Но , я не могу понять , что не так ! Убейте меня пожалуйста. Но сперва обьясните. Скомпилим пример товарища выше.... Работает !!!! меняем размерность адреса (8,7, 6 или5).... Работает !!!! В цикле (просто от 0 до Х) подставляем на вход функции разные адреса..... Работает гадина !!!! Окей. Ставим кусок в код. Шлем адреса и всё снова так , как было с первых строк этой зпопеи. Скажите ,пожалуйста , как лучше. "Сдвигать" адрес , маску , как ?
0
|
|
|
|
|
| 07.02.2010, 11:11 | |
|
Alex83, я правильно понимаю, что функция padla должна распечатать двоичное представление младших 7 бит (начиная со старшего) значения, поданного в качестве параметра addr?
Добавлено через 4 минуты Если ответ на этот вопрос утвердительный, то тебе надо 128 заменить на 64. Потому как "and 128" - это восьмой бит (если отсчёт начинать с единицы). Поэтому твоя программа печатает не младшие 7 бит, а биты с 2 по 8 (если самый младший считать битом номер один). Поэтому для нечётного числа делается такая же печать, как и для чётного на единицу меньше
1
|
|
|
13 / 13 / 1
Регистрация: 06.02.2010
Сообщений: 19
|
|
| 07.02.2010, 13:05 [ТС] | |
|
Благодарю. Теперь действительно стало понятно.
А то прям мистика =)
0
|
|
|
13 / 13 / 1
Регистрация: 06.02.2010
Сообщений: 19
|
|
| 07.02.2010, 14:22 [ТС] | |
|
0
|
|
|
|
|||
| 07.02.2010, 14:30 | |||
![]()
1
|
|||
| 07.02.2010, 14:30 | |
|
Помогаю со студенческими работами здесь
9
Странное поведение программы Странное поведение строки Странное поведение cin Странное поведение функции
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|