Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621

Прояснить смысл строчки кода

04.07.2019, 01:35. Показов 1851. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
SendMessage(0x202,0xA0);
C++
1
2
3
4
5
6
7
8
9
10
void SendMessage(char adress, char command)
{
 for (char i = 0; i < 16; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    if ((adress & (1 << i)) == 1 << i) [B]Вот в этой строчке, по пунктам, что происходит?[/B]
      SendBIT(1);
    else //посылаем 0
      SendBIT(0);
  }
}
if ((adress & (1 << i)) == 1 << i) Вот в этой строчке, мне не понятно, как обрабатывается условие
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2019, 01:35
Ответы с готовыми решениями:

Расшифруйте 3 строчки кода
const int SIZE = 100; char *ch = new char; char *x= {0}; Объясните, что здесь происходит, для чего {0} Так же как сделать...

Прокомментировать 2 строчки кода
Вот весь код Ovchinnikov13.cpp Открыть с помощью #include &lt;stdio.h&gt; //#include &lt;conio.h&gt; int main() {

Объясните две строчки кода
что значит вот это: имею вввиду каждые функциии: не могу найти if ( n.peek() == ifstream::traits_type::eof() ) ofstream n(...

35
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 14:01  [ТС]
Студворк — интернет-сервис помощи студентам
Собственно отправил значок ~ перед байтом, и все стало на места свои, выглядит, конечно это дело как костыль ))

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void SendBIT(int _log) // Отправляем лог 0
{
  for (int i = 0; i < 21; i++)
  {
    PH6_On; // подаем 5 вольт на порт
    delayMicroseconds(6); // Задержка в мкс
    PH6_Off; // 0 вольт
    delayMicroseconds(16); // Задержки нужны, чтобы формировать длинну импульсов
  }
  if (_log == 0)
    delayMicroseconds(425); // Конечная задержка после пачки импульсов, если 0, то коротка, если 1 то длинная
  else if (_log == 1)
    delayMicroseconds(1290);
}
0
Злостный нарушитель
 Аватар для Verevkin
10921 / 5849 / 1289
Регистрация: 12.03.2015
Сообщений: 26,957
04.07.2019, 14:03
Это чо за хрень?!
C++
1
#define PH6_Off    PORTH = 0<<6
Сдвиг нуля на 6 разрядов?!!!11
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 14:03  [ТС]
Так как дуньке требуется ощутимое время, на работу с портами, циклами и условиями, то задержки не соответствуют даташиту, я их отлаживал через логический анализатор, подбирая оптимальное время
Миниатюры
Прояснить смысл строчки кода  
0
Злостный нарушитель
 Аватар для Verevkin
10921 / 5849 / 1289
Регистрация: 12.03.2015
Сообщений: 26,957
04.07.2019, 14:04
Цитата Сообщение от Scrypto Посмотреть сообщение
Собственно отправил значок ~ перед байтом
А говоришь, что ст. битами вперёд. А оказывается, что инверсная логика.
Фу таким быть.
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 14:06  [ТС]
Verevkin, Да, именно так
В порте "H", выключить 6 бит. Чтобы на него не подавалось питание.

Добавлено через 59 секунд
Цитата Сообщение от Verevkin Посмотреть сообщение
А говоришь, что ст. битами вперёд. А оказывается, что инверсная логика.
Фу таким быть.
Вот так сделал,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  byte ard = ~B11110000;
  SendMessage(ard);
  delay(10000);
 
}
 
void SendMessage(byte addressLow)
{
 byte adr = addressLow;
  for (int i = 0; i < 8; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    Serial.print((adr & 1));
    adr >>= 1;
  }
}
Добавлено через 38 секунд
То есть, я перевернул бит, еще до отправки в функцию.
Если этого не делать, то собственно все получается в перевернутом состоянии.
0
Злостный нарушитель
 Аватар для Verevkin
10921 / 5849 / 1289
Регистрация: 12.03.2015
Сообщений: 26,957
04.07.2019, 14:13
Цитата Сообщение от Scrypto Посмотреть сообщение
Verevkin, Да, именно так
В порте "H", выключить 6 бит. Чтобы на него не подавалось питание.
Вот так у нас программисты работают - не знают логической арифметики. Какой кошмар... А потом самолёты падают и подводные лодки тонут.
Цитата Сообщение от Scrypto Посмотреть сообщение
То есть, я перевернул бит, еще до отправки в функцию.
Если этого не делать, то собственно все получается в перевернутом состоянии.
В перевёрнутом (инверсном) состоянии - это не "старшими битами вперёд", а ваще разные непересекающиеся вещи.

И не надо морочать дядям голову.

1
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 19:35  [ТС]
Verevkin, дядь
Опять не получается, не дай спиться мне
Вот этот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void setup() { // Функция задачи параметров
  Serial.begin(9600); // Открываем серийный порт, для просмотра информации
}
 
void loop() { // бесконечный цикл
  byte ard = ~B10100000;
  SendMessage(ard);
  delay(10000); // Задержка 10 секунд
 
}
 
void SendMessage(byte addressLow)
{
 byte adr = addressLow;
  for (int i = 0; i < 8; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    Serial.print((adr & 1)); // Печатаем 0 или 1, чтобы можно было посмотреть, что отправляет программа
    adr >>= 1;
  }
}
Вместо 10100000
Выдаёт 11111010
Вот теперь не инверсия, а разряды перекинул (
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.07.2019, 19:51
Scrypto, я часть сообщений пропустил, но, мне думается, что ты перепутал инверсию битов с инверсией последовательности битов.
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 19:58  [ТС]
Vourhey, ну по началу да.
Но теперь, когда инветировал каждый бит, теперь еще нужно поставить их задом наперед.
Я уже потихоньку с ума схожу )
0
Злостный нарушитель
 Аватар для Verevkin
10921 / 5849 / 1289
Регистрация: 12.03.2015
Сообщений: 26,957
04.07.2019, 20:02
Да ты задолбал.
Вот имитация последовательной выдачи младшими битами вперёд.



Тебе так надо или как?
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 20:02  [ТС]
В общем сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define INVERT_BYTE(a)   ((a&1)<<7) | ((a&2)<<5) | ((a&4)<<3) | ((a&8)<<1) | ((a&16)>>1) | ((a&32)>>3) | ((a&64)>>5) | ((a&128)>>7)
void setup() { // Функция задачи параметров
  Serial.begin(9600); // Открываем серийный порт, для просмотра информации
}
 
void loop() { // бесконечный цикл
  byte ard = B10100000;
  SendMessage(ard);
  delay(10000); // Задержка 10 секунд
 
}
 
void SendMessage(byte addressLow)
{
 byte adr = INVERT_BYTE(addressLow);
 
  for (int i = 0; i < 8; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    Serial.print((adr & 1)); // Печатаем 0 или 1, чтобы можно было посмотреть, что отправляет программа
    adr >>= 1;
  }
}
0
04.07.2019, 20:03

Не по теме:


Verevkin, мммм, какая тема вкусная! Как называется, что за редактор?

0
Злостный нарушитель
 Аватар для Verevkin
10921 / 5849 / 1289
Регистрация: 12.03.2015
Сообщений: 26,957
04.07.2019, 20:05
Сделать старшими вперёд?

Добавлено через 2 минуты
Цитата Сообщение от Vourhey Посмотреть сообщение
Verevkin, мммм, какая тема вкусная! Как называется, что за редактор?
Это онлайн-дебаггер для ленивых. Мне реально влом запускать IDE из-за такой грошовой ерунды.
1
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
04.07.2019, 20:07
Цитата Сообщение от Scrypto Посмотреть сообщение
Вместо 10100000
Выдаёт 11111010
Вот теперь не инверсия, а разряды перекинул (
Он и должен выдывать 11111010. Смотри. У тебя есть число B10100000. Ты его инвертируешь (т. е. каждую 1 заменяешь на 0 и наоборот):

C
1
byte adr = ~B10100000; /* adr = B01011111 */
Потом в цикле перебираешь по битам начиная с младшего (правого):

C
1
2
3
4
5
6
7
(adr & 1) /* 0101111(1) & 0000000(1) = 1 (тут будет integer promotion, но это не важно) */
adr >>= 1 /* adr = 00101111 */
 
(adr & 1) /* 0010111(1) & 0000000(1) = 1 */
adr >>= 1 /* adr = 00010111 */
 
...
1
Злостный нарушитель
 Аватар для Verevkin
10921 / 5849 / 1289
Регистрация: 12.03.2015
Сообщений: 26,957
04.07.2019, 20:11
ыЪ.

1
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 21:27  [ТС]
Собственно все получилось, всем спасибо )
вот результат: https://www.instagram.com/p/Bz... a20dboozp2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2019, 21:27

Перегрузка, адресация, объясните строчки кода
Помогите разобраться что значат, делают приведенные строки кода: 1.В первой строке объявляется объект класса uravnenie, 3-я строка тоже...

3 строчки кода, как называется данная конструкция?
double a = 0.3, b = -1; int m; m = a * b &gt; 0; m равна нулю. Но конструкция мне не понятна, и как загуглить тоже понятия не имею,...

Перевести 2 строчки кода с printf на cout пожалуйста!
Помогите перевести с printf на cout. printf(&quot;x=%0.5lf\n&quot;,i+1,X); printf(&quot;При количестве итераций=%d\n&quot;,count);

Есть некоторые строчки кода, которые я не понимаю
Добрый день. У меня есть код программ но есть некоторые строчки кода которые я не понимаю. Помогите разобраться. Как бы что тут...

Описать строчки кода, что они делают!
Код программы: #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; int main() { setlocale(LC_ALL,...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru