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

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

04.07.2019, 01:35. Показов 1574. Ответов 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
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.07.2019, 01:50
1 сдвигаем на i влево, чтобы выставить в 1 бит, который хотим проверить. Потом битовое & с адресом. Таким образом, если бит i в адресе включен, то получится единица для i-того бита, так как 1 & 1 это 1.
Цитата Сообщение от Scrypto Посмотреть сообщение
== 1 << i
Эта проверка не нужна, так как достаточно знать, что у нас ненулевое значение получилось после adress & (1 << i)
И слово address написано неправильно.
1
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 08:31
C++
1
2
3
4
5
void SendMessage(char adress, char command)
{
  for (char i = 0; i != 16; i++) //посылаем отдельно каждый бит АДРЕСА
    SendBIT(adress & 1), adress >>= 1;
}
1
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 12:50  [ТС]
Verevkin, А не подскажите, почему код
C++
1
2
for (char i = 0; i != 8; i++)   //посылаем отдельно каждый бит АДРЕСА
    SendBIT(adress & 1), adress >>= 1;
При входном 0x81, вместо 1000 0001‬, выдаёт 0001 1111
0
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 12:56
Цитата Сообщение от Scrypto Посмотреть сообщение
При входном 0x81, вместо 1000 0001‬, выдаёт 0001 1111
Показывай функцию SendBIT().
1
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.07.2019, 12:57
Scrypto, код - правильный. Проблема, значит, в SendBIT.
1
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 12:59  [ТС]
Vourhey,
Вообще это програмка для ардуино, и я в сериал, послал данные и там смотрю, еще до того, как в send bit
C++
1
2
3
4
5
6
 for (char i = 0; i < 8; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    Serial.print((addressLow & 1), addressLow >>= 1);
    SendBIT(addressLow & 1), addressLow >>= 1;  
    delay(100);
  }
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.07.2019, 13:02
Цитата Сообщение от Scrypto Посмотреть сообщение
Serial.print((addressLow & 1), addressLow >>= 1);
Уже в этой строке меняешь addressLow. И в sendbit она приходит уже смещенная.

Добавлено через 57 секунд
Вот простая проверка кода Verevkin:
C++
1
2
3
4
5
6
7
8
9
10
11
void SendBIT(char c)
{
  std::cout << (c&1)?1:0;
}
 
int main()
{
  char adress = 0x81;
  for (char i = 0; i != 8; i++)   //посылаем отдельно каждый бит АДРЕСА
    SendBIT(adress & 1), adress >>= 1;
}
Вывод:
Code
1
10000001
1
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 13:03
Цитата Сообщение от Scrypto Посмотреть сообщение
послал данные и там смотрю, еще до того, как в send bit
Ахахаха!! Ну ты приколист.
Отладчик юзай - сразу поймёшь, где ты накосячил.

Добавлено через 1 минуту
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
2
3
4
void SendBIT(char c) 
{ 
  std::cout << (c&1)?1:0; 
}
Грязный извращенец!
1
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 13:07  [ТС]
Verevkin, я бы с радостью ) Дак нет его в arduine )

Вот упростил код до минимума, и он стал выдавать 00000011, я походу за бутылкой сейчас пойду, что вообще происходит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  SendMessage(0x81);
  delay(1000);
 
}
 
void SendMessage(char addressLow)
{
 
  for (char i = 0; i < 8; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    Serial.print((addressLow & 1), addressLow >>= 1);
    delay(100);
  }
}
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.07.2019, 13:07

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
Грязный извращенец!


1
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 13:12
Цитата Сообщение от Scrypto Посмотреть сообщение
я бы с радостью ) Дак нет его в arduine )
Да причом тут твоя ардуина? Для отладки отдельных функций можно написать тестовую прогу, например, в CodeBlocks. Так шо не надо! Здесь вам не тут.
Цитата Сообщение от Scrypto Посмотреть сообщение
Вот упростил код до минимума, и он стал выдавать 00000011, я походу за бутылкой сейчас пойду, что вообще происходит
Если дебаггер не научишься юзать, сопьёсся до состояния абизЪяны. :black_eye.:
1
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 13:40  [ТС]
Сделал так:

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 = 0x55;
  SendMessage(ard);
  delay(10000);
 
}
 
void SendMessage(byte addressLow)
{
 byte adr = addressLow;
  for (int i = 0; i < 8; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    Serial.print((adr & 1));
    adr >>= 1;
  }
}
Похоже, что проблема была в том, что я не объявил в функции еще одну переменную и не присвоил ей значение
C++
1
 byte adr = addressLow;
Но теперь все байты переворачивает задом наперед.
0101 0101 он выдает как 1010 1010
Но я так понимаю, именно это и должно происходить при ипользовании такого подхода,
C++
1
2
    Serial.print((adr & 1));
    adr >>= 1;
Получается он вправо сдвигает по байту, и печатает.

Буду думать, как перевернуть
0
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 13:45
Цитата Сообщение от Scrypto Посмотреть сообщение
Буду думать, как перевернуть
У тебя выдача старшими битами вперёд, штоли?
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 13:46  [ТС]
Verevkin, да, получается так )
0
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 13:47
Цитата Сообщение от Scrypto Посмотреть сообщение
Похоже, что проблема была в том, что я не объявил в функции еще одну переменную и не присвоил ей значение
нет.

Добавлено через 54 секунды
Цитата Сообщение от Scrypto Посмотреть сообщение
да, получается так )
Бред какой-то. Ты б набросал по-русски, чо тебе надо, а также входные и выходные данные..
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 13:47  [ТС]
Он как бы инвертирует
11110000 он выдаёт как 00001111
0
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 13:48
И исходник функции SendBIT() покаж.
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
04.07.2019, 13:53  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Бред какой-то. Ты б набросал по-русски, чо тебе надо, а также входные и выходные данные..
Принимаю байт на вход функции,
Разделяю его на биты, и в зависимости 0 или 1, запускаю другую функцию с нужным аргументом.
Пытаюсь повторить протокол ик связи пульта с тв, знаю, что есть готовые библиотеки, но что-то зацепило, решил сам ради интереса провернуть, и заступорилось все на этом месте.

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
И исходник функции SendBIT() покаж.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#define PH6_On    PORTH = 1<<6
#define PH6_Off    PORTH = 0<<6
#define IR 9
 
void SendMessage(char addressLow, char addressHigh, char commanda)
{
  unsigned long microSex = micros();
  while ((micros() - microSex) < 9000)
  {
    PH6_On;
    delayMicroseconds(8); // Пакет АРУ
 
    PH6_Off;
    delayMicroseconds(17); // Задержка
  }
  delayMicroseconds(3380);
 
  for (char i = 0; i < 8; i++) //посылаем отдельно каждый бит АДРЕСА
  {
    SendBIT(addressLow & 1), addressLow >>= 1;    
  }
}
 
void SendBIT(int _log) // Отправляем лог 0
{
  for (int i = 0; i < 21; i++)
  {
    PH6_On;
    delayMicroseconds(6);
    PH6_Off;
    delayMicroseconds(16);
  }
  if (_log == 0)
    delayMicroseconds(425);
  else if (_log == 1)
    delayMicroseconds(1290);
}
Получается, что мне нужно делать, то что делает пульт при нажатии на кнопку.
На частоте 38 кГц, отправлять пачки импульсов, чтобы ик приемник, в зависимости от пауз после пачек, понимал что я там ему присылаю
0
Злостный нарушитель
 Аватар для Verevkin
10234 / 5663 / 1260
Регистрация: 12.03.2015
Сообщений: 26,255
04.07.2019, 13:59
delayMicroseconds(xxxx) - это просто тупая задержка на ххх мкс? Чо за дичь творится у тебя в функции SendBIT()? напиши-ка комментарии, а то я в ваших ардуинах не копенгаген.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2019, 13:59
Помогаю со студенческими работами здесь

Перегрузка, адресация, объясните строчки кода
Помогите разобраться что значат, делают приведенные строки кода: 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,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru