Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67

Инкремент значения переменной

03.10.2013, 21:52. Показов 2825. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, разъясните пожалуйста ответ компилятора
C#
1
2
3
int i = 3;
            int y = ++i + i++ + i++ + ++i + ++i + i++;
            Console.WriteLine(y);
Почему получается 36...я как ни кручу получается 29??????
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.10.2013, 21:52
Ответы с готовыми решениями:

Инкремент значения строки
Здравствуйте! Есть строка AB нужно увеличить эти символы в лексикографическом значении: например АВ + 2 = AD При переходе через...

Как присвоить значение переменной, исходя из значения другой переменной?
Всем привет. Нужна помощь. Есть переменная, например "month" которая может принимать значения от 01 до 12, и переменная...

Неожиданный результат при выводе значения переменной, несмотря на инкремент
подскажите почему значения a и с начинаются с 1 а не с 2 стоит же "++" int a = 1; void f() { int b = 1; // инициализируется...

34
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:00
Потому что у i++ эффект следующий, сначала выполнить операцию сложения, а потом увеличить на еденицу!
Это называется побочным эффектом.

Добавлено через 2 минуты
расставьте скобки.
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:01  [ТС]
Цитата Сообщение от PetyaVasechkin Посмотреть сообщение
Потому что у i++ эффект следующий, сначала выполнить операцию сложения, а потом увеличить на еденицу!
Это называется побочным эффектом.

Добавлено через 2 минуты
расставьте скобки.
а можно поподробнее в моём примере у меня получается так 4+4+4+5+6+6.....????
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:05
Цитата Сообщение от ultim Посмотреть сообщение
а можно поподробнее в моём примере у меня получается так 4+4+4+5+6+6
Зависит от компилятора.

Вы пропустите через отладчик и увидите сами, что получается.
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:08  [ТС]
что за хрень...задача за первый класс..не пойму причём компилятор?
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:10
ultim, а при том, что именно от того как компилятор будет делать разбор строки, от того и будет зависеть результат!
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:13  [ТС]
Цитата Сообщение от PetyaVasechkin Посмотреть сообщение
ultim, а при том, что именно от того как компилятор будет делать разбор строки, от того и будет зависеть результат!
ничего не поменялось

C#
1
2
3
4
5
6
static void Main(string[] args)
        {
            int i = 3;
            var y = ++i + (i++) + (i++) + (++i) + (++i) + i;
            Console.WriteLine(y);
        }
вопрос остаётся открытым
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:17
Посмотрите под отладчиком!
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:17  [ТС]
Цитата Сообщение от PetyaVasechkin Посмотреть сообщение
Посмотрите под отладчиком!
КАК?????
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:30
Если вы работаете в студии, то там есть debuger (отдладчик), поищите его в меню
Если нет, то можно воспользоваться сторонним, например OllyDebuger и посмотреть во что превращается ваш код.

Добавлено через 56 секунд
И попробуйте изменить var на int

Добавлено через 8 минут
Вот у меня в Perl получается 37
Perl
1
2
3
4
5
6
sub test {
    my $i = 3;
    my $y = ++$i + $i++ + $i++ + ++$i + ++$i + $i++;
    print $y;
}
test;
Так что, зависит от компилятора!
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:30  [ТС]
брррррр???????
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:33
Цитата Сообщение от ultim Посмотреть сообщение
брррррр???????
А что вы хотели
Перепишите строку по человечески. (вы и компилятор, тут видят разные операции)
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:35  [ТС]
Цитата Сообщение от PetyaVasechkin Посмотреть сообщение
А что вы хотели
Перепишите строку по человечески. (вы и компилятор, тут видят разные операции)
куда уж человечнее...

C#
1
2
3
4
5
6
static void Main(string[] args)
        {
            int i = 3;
            int y = ++i + (i++) + (i++) + (++i) + (++i) + i;
            Console.WriteLine(y);
        }
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:38
Давайте так ...
Сложите int y = ++i и i++ и потом добавляйте по i (++i\i++) и смотрите.

Добавлено через 35 секунд
Тогда вы поймете как делает это C#

Добавлено через 2 минуты
Уверен, вас ждет сюрприз
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:39  [ТС]
я так уже пробовал
++i + (i++)=8 (4+4)это понятно
++i + (i++) + (i++)=13это уже не понятно по теории должно 4+4+4
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:44
Цитата Сообщение от ultim Посмотреть сообщение
по теории должно 4+4+4
Это для вас нет значения, а для C# есть. Он по своему группирует операнды!
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
03.10.2013, 22:45
ultim,

Все дело в старшенстве исполнения.
// int y = ++i + 1; // будет 5 (сперва увеличение i, потом действие с числом)
// int y = i++ + 1; // будет 4 (сперва действие с числом, потом увеличение i)

Сперва i =4, потом 5, 6, опять 6, 7, 8, 9 (но 9 уже в выражение не попадает, т.к последнее i++ делается самым последним )
C#
1
2
3
4
5
6
7
            int i = 3;
              int y = ++i + i++ + i++ + ++i + ++i + i++;
              //       4                 5      6 
                 //          6     7                 8              
 
            Console.WriteLine(y);
            Console.WriteLine(i);
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 22:46
Он ++ как бы выносит за скобки, на потом...
0
0 / 0 / 0
Регистрация: 02.09.2013
Сообщений: 67
03.10.2013, 22:57  [ТС]
Цитата Сообщение от Евгений В Посмотреть сообщение
ultim,

Все дело в старшенстве исполнения.
// int y = ++i + 1; // будет 5 (сперва увеличение i, потом действие с числом)
// int y = i++ + 1; // будет 4 (сперва действие с числом, потом увеличение i)

Сперва i =4, потом 5, 6, опять 6, 7, 8, 9 (но 9 уже в выражение не попадает, т.к последнее i++ делается самым последним )
C#
1
2
3
4
5
6
7
            int i = 3;
              int y = ++i + i++ + i++ + ++i + ++i + i++;
              //       4                 5      6 
                 //          6     7                 8              
 
            Console.WriteLine(y);
            Console.WriteLine(i);
то есть во втором операторе он как бы выполняет две функции...это ни Троелсен ни Шилдт не поняли бы...
0
117 / 117 / 0
Регистрация: 27.09.2013
Сообщений: 710
03.10.2013, 23:00
Цитата Сообщение от ultim Посмотреть сообщение
это ни Троелсен ни Шилдт не поняли бы...
Да просто никто так программы не пишет )))))))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2013, 23:00
Помогаю со студенческими работами здесь

Инкремент переменной
в задании сказано, что пользователь вводит строку и программа выводит ее, но если пользователь вводит еще и цифру, то программа должна...

Инкремент переменной
Всем привет! Есть такой код: <div class="box"> <?php $moveCounter = 0; //... ...

Инкремент переменной в рекурсии
Здравствуйте форумчане, что то не приходит идея как сделать в рекурсивном методе переменную, чтобы на следующем входе в функцию она не...

Инкремент переменной префаба
Пытаюсь инкрементировать переменную, которая в скрипте EnemyScript, который в префабе Enemy.. NullReferenceException: Object...

Странно работает инкремент переменной
Делаю скрипт-викторину, фронтэнд представляет из себя таблицу в 4 столбца, первый-название, следующие 3 - формы. При нажатии кнопки скрипт...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru