Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
Заблокирован

Нюансы синтаксиса: statement for - как понимать запись for (count=0, mask=1; count != 16; count++, mask<<= 1)?

11.04.2017, 10:59. Показов 6459. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам

Не по теме:

Много всяких языков попадалось, относительно много конечно, но такое вижу первый раз, что бы тело FOR имело не 3 оператора - начальный, максимальный, и шаг, а еще и маска какая то?

Разве бывает такой FOR? Что он вообще делает? Первый раз такое вижу.
C++
1
for (count=0, mask=1; count != 16; count++, mask<<= 1)
, а вот вся функция:
Кликните здесь для просмотра всего текста

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
void out_bin(int data, int num_digits)
/*
Вывод в двоичной форме:
data - выводимое значение
num_digits - число выводимых цифр, начиная справа
*/
{
    char string[16];
    int mask;
    int count;
 
    for (count = 0, mask = 1; count != 16; count++, mask <<= 1)
        string[count] = (data & mask) ? '1' : '0';
    if (fields && num_digits == 16)
    {
        count = num_digits; /* вывод слова с выделением полей */
        textcolor(CYAN);
        for (; count != 11; putch(string[--count]))
            ;
        textcolor(LIGHTRED);
        putch(string[--count]);
        textcolor(YELLOW);
        for (; count != 5; putch(string[--count]))
            ;
        textcolor(GREEN);
        for (; count != 0; putch(string[--count]))
            ;
        textcolor(LIGHTGRAY);
    }
    else /* вывод без выделения полей */
        for (count = num_digits; --count >= 0; putch(string[count]))
            ;
}

Как это работает?

Не по теме:

Точное определение плюсам дал GbaLog - это с++, а не какойтодругойязыккоторыйпохож.

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2017, 10:59
Ответы с готовыми решениями:

Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это?
Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это? КОд:#include...

Нюансы синтаксиса: как работают выражения вида statement = statement = statement?
Всем привет. Что значит такое выражение в c++? c = c2 = c/2; и как вообще работают такие выражения?

как count endl заменить на printf ?
Всем добрый вечер , есть одна программа , там встречаются строчки . Собственно вопрос , как будут выглядеть эти строчки с использованием...

36
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
11.04.2017, 12:08
Студворк — интернет-сервис помощи студентам
Следующее
C++
1
2
for (count = 0, mask = 1; count != 16; count++, mask <<= 1)
        string[count] = (data & mask) ? '1' : '0';
можно записать по-другому
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    count = 0;
    mask = 1;
    goto next;
 
loop:
    if (data & mask)
        string[count] = '1';
    else
        string[count] = '0';
 
    count++;
    mask <<= 1;
next:
    if (count != 16)
        goto loop;
0
11.04.2017, 12:12

Не по теме:

:swoon:

0
11.04.2017, 12:13

Не по теме:

Цитата Сообщение от _liv_ Посмотреть сообщение
можно записать по-другому
можно Машку за ляшку,
в телегу с разбегу,
козу на возу,
не ковыряй в носу!

0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
11.04.2017, 12:13
Лучший ответ Сообщение было отмечено avitec как решение

Решение

avitec, ни то ни другое.
Это полностью серьезно.
да вся
Вы в первом сообщении спрашивали про цикл,
поэтому Вам и отвечают про цикл.

Я так понимаю, код под DOS, причем 16-разрядный?
Функция выводит число в двоичной форме и "раскрашивает" вывод.
Цикл забивает в символьный массив соответствующие символы,
в зависимости от того, установлен бит в числе или нет.
Начинает он от младшего разряда к старшему,
поэтому в string двоичный код числа будет перевернут,
т.е. в string[15] будет старший разряд, а в string[0] - младший.

Не знаю что такое field, из кода не ясно, но фиг с ним.
С конца начинают выводится разряды числа (оно же перевернутое).
В первом цикле в условии с 15-ого по 11-ый разряд включительно, цветом CYAN,
затем один разряд (10-ый), цветом LIGHTRED,
второй цикл выводит с 9-ого по 5-ый разряды включительно, цветом YELLOW,
третий цикл выводит разряды с 4-ого до 0-ого включительно цветом GREEN,
затем цвет вывола устанавливается в LIGHTGRAY.

Если же условие было ложным, то выводим указанное
количество (num_digits) разрядов числа (от указанного к младшему).
1
11.04.2017, 12:17

Не по теме:

А шо такое? :) Если человек не понимает оператор for, надо же как-то втолковать суть записанного? :)

0
Заблокирован
11.04.2017, 13:18  [ТС]

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Я после рабочего восьмичасового дня на основной работе пишу дома код на заказ
ну мне такая картина знакома, не так красиво звучит, но по по 12 часов в день уже три месяца и плюс пол одного выходного... просто реалии жизни...



Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от _liv_ Посмотреть сообщение
надо же как-то втолковать суть записанного
втолковали, нашлись порядочные люди, но к сожалению не вы...



Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Я так понимаю, код под DOS, причем 16-разрядный?
Да все так, большое спасибо!
0
11.04.2017, 13:38

Не по теме:

Цитата Сообщение от avitec Посмотреть сообщение
плюс пол одного выходного
В "выходные" у меня особый праздник жизни - и в субботу, и в воскресенье по 14-16 часов код пишу. Боже, когда же меня отпустит?

0
11.04.2017, 13:59

Не по теме:

gru74ik, когда спиртное пить бросишь, тогда и отпустит. )))

0
Заблокирован
11.04.2017, 19:43  [ТС]
Цитата Сообщение от avitec Посмотреть сообщение
for (count=num_digits; --count >= 0; putch(string[count]));
Это вот что за действие такое ? Во первых у этого For нет совсем тела, во вторых как он работает и главное зачем?
C++
1
putch(string[count])
это вывод на экран, но он находится в том месте For, где должно быть приращение переменной первого выражения в цикле For.

Не по теме:

Хочу добавить что этот драйвер написан очень грамотно, так как работает как часы, все что написано про него в документации - в точности выполняется и при компиляции и при отладке, но вот некоторый код, мне как дилетанту совершенно не понятен, писали видимо профи, причем 20 лет назад и до сих их ПО и железо продается и работает...

не могли бы Вы объяснить как это примерно работает и зачем оно тут может быть в таком виде?
C++
1
2
3
else       /* вывод без выделения полей */
  for (count=num_digits; --count >= 0; putch(string[count]));
}
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
11.04.2017, 21:36
Цитата Сообщение от avitec Посмотреть сообщение
Это вот что за действие такое ? Во первых у этого For нет совсем тела
Есть. Вот та точка с запятой - это пустая инструкция.
Цитата Сообщение от avitec Посмотреть сообщение
это вывод на экран, но он находится в том месте For, где должно быть приращение переменной первого выражения в цикле For.
стоит обратить внимание на посты выше.
И стоит забыть о конструкциях как в VB,
где в конце for указывается шаг.
Здесь Вам не Visual Basic.
Цитата Сообщение от avitec Посмотреть сообщение
и зачем оно тут может быть в таком виде?
Кто-то старался сократить код.
Зачем? Спросите у автора.
Переделаем на аналог:
C++
1
2
3
for (count=num_digits - 1; count >= 0; --count) {
   putch(string[count]);
}
Так Вам понятнее стало, что делает данный код?
1
Заблокирован
12.04.2017, 07:32  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Так Вам понятнее стало, что делает данный код?
Спасибо, совсем другое дело... конечно понятно теперь, код они сокращали потому, что он наверно слишом большой, не компилируется в среде борланд си, только в командной строке bcc.exe... 210 кило для памяти large это много?

Добавлено через 7 минут
Цитата Сообщение от avitec Посмотреть сообщение
--count >= 0;
но ведь после этого нет завершающей скобки? Она дальше на один оператор... С кодом все ясно, просто хочется воспользоваться случаем и спросить, вот такие вольности с кодом описаны в документации на язык или это достигается путем личного опыта и еще чего то?

Добавлено через 20 минут

Не по теме:

PS. Специально сейчас пролистал в расширенном поиске pdf книги с++ с циклом FOR везде рассматриваются примеры с классическим использованием For c тремя выражениями - начальное, максимальное , шаг. На какие такие волшебные книги вы все отправляете для почерпывания знаний на форуме, для меня всегда остается загадкой. А что касается инета, то там во первых очень много мусора и трудно найти что то полезное, а во вторых надо еще уметь правильно написать строку поиска. Это не лично Croessmah это просто всем желающим сперва куда то послать, а потом уже попытаться объяснить.

0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
12.04.2017, 10:37
Цитата Сообщение от avitec Посмотреть сообщение
вот такие вольности с кодом описаны в документации на язык
Это не вольности. Это вполне нормальный синтаксис for.
Да, не во всех языках так можно. В этом - можно.

Например:
C++
1
2
3
4
5
6
#include <iostream>
 
int main()
{
    for(char const *arr[] = {"world", "hello"}, **s = (arr + sizeof(arr)/sizeof(*arr)); s != arr; std::cout << *(s-1) << " ", --s);
}
http://rextester.com/ZIEXS93822
1
Заблокирован
12.04.2017, 10:54  [ТС]
http://rextester.com/ZIEXS93822 это что такое ? Виртуальная интернет среда компиляции в линуксе ? Или это что то большее? Никогда такого не видел, она (среда) легко переделала рабочий код на с++ в рабочий код на с# это что за чудо такое вы дали?

Добавлено через 2 минуты
Спасибо, очень интересно.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
12.04.2017, 11:00
Цитата Сообщение от avitec Посмотреть сообщение
она (среда) легко переделала рабочий код на с++ в рабочий код на с# это что за чудо такое вы дали?
Где? Ничего она не переделывала. Код компилировался gcc.
Цитата Сообщение от avitec Посмотреть сообщение
Виртуальная интернет среда компиляции
Ну да. Облачный компилятор. https://tproger.ru/digest/compile-code-online/
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
12.04.2017, 11:09
Цитата Сообщение от Croessmah Посмотреть сообщение
Где? Ничего она не переделывала.
Если поменять язык, то и код меняется
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
12.04.2017, 11:25
_liv_, ну так он на стандартный hello world меняется,
а не конвертируется в аналогичный на другом языке.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
12.04.2017, 11:35
Croessmah, тю, всего-то Ну и ладно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2017, 11:35

iterator to count
Возможно ли как-то получить порядковый номер вместо итератора не используя локальны счетчик. Для примера: std::string...

Ошибка в count<<x;
Начал работать с С++ и столкнулся с Туевой Хучей проблем, основная из них незнание языка и синтаксиса. Пожалуй первый свой косяк я сюда...

Неоднозначность переменной count
Доброго времени суток. Использую VS2013. Подскажите пожалуйста, по какой причине глобальная переменная, в приведенном ниже коде, не...

Ошибка MySQL error: Column count doesn't match value count at row 1
Подскажите, пожалуйста где тут ошибка? Вылазит ошибка: MySQL error: Column count doesn't match value count at row 1 INSERT INTO...

Ошибка в запросе: Column count doesn't match value count at row 1
Здравствуйте, я новичок в изучении php и sql. При добавлении новой книги в БД необходимо выбрать предмет из выпадающего списка. Когда...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru