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

Вычисление инкремента, декремента. Объяснить код

01.01.2014, 21:26. Показов 2631. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
double u = 0.5;
int f = ((int)u + (int)++u);
Пожалуйста, объясните. Почему f = 1
Ведь сначала, выполняется префиксный инкремент (int)++u. Затем это значение записывается в переменную u
и потом целая часть u (1,5) складывается с целой частью u (1,5). В результате f должно быть равной 2.
Почему получается что увеличенная на единицу u, складывается с прежним значением u? А ведь в переменную после использования префиксного инкремента, должно сразу же записываться новое значение.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.01.2014, 21:26
Ответы с готовыми решениями:

Операторы инкремента и декремента
в роди понимаю как работает,начинаю проверять вручную и не получается. помогите разобраться как считает эта программа. static void...

Перегрузка инкремента\декремента. Комплексные числа
Есть класс комплексных чисел, для него перегружаем инкремент или декремент. Если остальные перегрузки работают так как надо, то эти двое...

Почему разные ответы ? Оператор инкремента и декремента. Уравнение
Начал изучать c# и наткнулся на "Оператор инкремента и декремента" Решал уравнение и получил результат. Но не понял почему во втором...

18
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
01.01.2014, 21:44
А вы поменяйте местами и посмотрите,что получится
Вначале выполняется то,что слева от оператора "+".
1
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 78
01.01.2014, 22:07  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
А вы поменяйте местами и посмотрите,что получится
Вначале выполняется то,что слева от оператора "+".
Согласна, но как же наивысший приоритет префиксного инкремента, перед другими операндами? С новым Годом!
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
01.01.2014, 22:17
Цитата Сообщение от gfer Посмотреть сообщение
Согласна, но как же наивысший приоритет префиксного инкремента, перед другими операндами? С новым Годом!
А он и выполняется раньше,чем оператор привидения типов.
С Новым Годом!
1
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
01.01.2014, 22:23
gfer, если так понятнее, то
C#
1
2
3
Math.Abs(++i);
//эквивалентно
Math.Abs(1 + i++);
Добавлено через 3 минуты
префиксная форма не имеет никакого "приоритета",
а постфиксная же выполняется не сразу, а перед следующим выражением
еще один пример
C#
1
2
3
4
5
6
7
8
int a = 1;
int b = a++;
int c = a + b;
//эквивалентно
int a = 1;
int b = a;
a = a + 1;
int c = a + b;
1
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 78
02.01.2014, 16:53  [ТС]
int i = 3;
int a = ++i + i++ + i++ + ++i + ++i + i++;
a=36, i=9
Почем i = 9 мне понятно, но как переменной a было присвоено такое значение? не иначе как 9 + 9 + 9 + 9 + 9 + 9.
Тогда принцип "слева на право" себя не оправдывает.
0
Заблокирован
02.01.2014, 17:02
Цитата Сообщение от gfer Посмотреть сообщение
Почем i = 9 мне понятно, но как переменной a было присвоено такое значение? не иначе как 9 + 9 + 9 + 9 + 9 + 9.
Тогда принцип "слева на право" себя не оправдывает.
Нет-нет, вы не правильно поняли, а = 36.т.к:
4 + 4 + 5 + 7 + 8 + 8;
А теперь по элементо:
Цитата Сообщение от gfer Посмотреть сообщение
int a = ++i
4(i=4);
Цитата Сообщение от gfer Посмотреть сообщение
+ i++
+4(i=5)
Цитата Сообщение от gfer Посмотреть сообщение
+ i++
+5(i=6)
Цитата Сообщение от gfer Посмотреть сообщение
++i
+7(i=7)
Цитата Сообщение от gfer Посмотреть сообщение
++i
+8(i=8)
Цитата Сообщение от gfer Посмотреть сообщение
i++
+8(i=9_
1
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
02.01.2014, 17:07
Цитата Сообщение от gfer Посмотреть сообщение
Тогда принцип "слева на право" себя не оправдывает.
Это не принцип
Оператор сложения - тоже функция,то что слева-её первый аргумент,справа-второй.
Возвращаемое значение сумма элементов.
1
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 78
02.01.2014, 17:10  [ТС]
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Нет-нет, вы не правильно поняли, а = 36.т.к:
4 + 4 + 5 + 7 + 8 + 8;
А теперь по элементо:

4(i=4);

+4(i=5)

+5(i=6)

+7(i=7)

+8(i=8)

+8(i=9_
Спасибо Вам огромное! Прояснилось!
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.01.2014, 20:26
это вообще UB. Результат не гарантирован. Результат может быть любым, в зависимости от положения луны на небе и того, зашел ли сатурн в альдебаран, от 0 до 2.

Добавлено через 2 минуты
http://ru.wikipedia.org/wiki/%... 0%B8%D0%B5
1
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 78
02.01.2014, 22:32  [ТС]
Последний вопрос из зала:
int p = 0;
int t = p++ - --p;
Результат: p=0, t=0
Почему если 0 - (-1) = 1. Переменно p должно быть присвоено 1
Всем заранее спасибо!
0
Заблокирован
02.01.2014, 22:52
Цитата Сообщение от gfer Посмотреть сообщение
Почему если 0 - (-1) = 1. Переменно p должно быть присвоено 1
вы забыли, что p уже стало 1, поэтому:
0 - 0 = 0
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.01.2014, 22:54
gfer, Ev_Hyper, вы вообще читаете, что вам пишут?

Любой ответ, кроме "неизвестно" является неправильным. И то что компьютер что-то там выдал ничего не означает. Это фактически ошибка программы.
0
Заблокирован
02.01.2014, 22:58
Цитата Сообщение от Psilon Посмотреть сообщение
вы вообще читаете, что вам пишут?
ваше сообщение было последним на странице, я его не увидел.

Цитата Сообщение от Psilon Посмотреть сообщение
Любой ответ, кроме "неизвестно" является неправильным. И то что компьютер что-то там выдал ничего не означает. Это фактически ошибка программы.
Хм, а вот по вашей ссылке написано:

При его выполнении переменная i может принять значения 13 или 14 для C/C++, 13 для Java, PHP и C#,
то есть для С# ответ однозначен.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.01.2014, 23:04
Ev_Hyper, а вот если вы не под CLR, а под MONO запустите, результат может отличаться. Может на другом оборудовании отличаться и тд. Черным по белому написано:
Допускать такую ситуацию в программе считается ошибкой
далее говорить не о чем.
1
Заблокирован
02.01.2014, 23:06
Цитата Сообщение от Psilon Посмотреть сообщение
Допускать такую ситуацию в программе считается ошибкой
да это как раз понятно, я не думаю, что такая реализация прийдет кому-то в голову. Тут же другая ситуация - научиться понимать разницу между пост/преф инкриментом.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.01.2014, 23:07
Ev_Hyper, объясняется намного проще это

t = x++ <=> t = x; x = x + 1;
t = ++x <=> x = x+1; t = x;
а эти извращения только мозг портят и путают.
0
Заблокирован
02.01.2014, 23:09
Psilon, бесспорно

gfer, вы не подскажите откуда берете такие примеры?
0
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 78
19.01.2014, 15:53  [ТС]
Я их сама придумываю, а потом не знаю как решить))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2014, 15:53
Помогаю со студенческими работами здесь

Операторы инкремента и декремента
Создайте в классе Circle префиксный и постфиксный операторы инкремента и декремента, воздействующие только на член-данное радиус itsRadius.

Ассоциативность инкремента декремента
Всем привет. Вот такую табличку недавно нашел - http://ru.cppreference.com/w/cpp/language/operator_precedence Почему префиксный...

Использование инкремента(Декремента)
Есть три кнопки и три индикатора(лампочки). Если нажимаю кнопку-1 тогда включается лампочка нажимаю еще раз выключается. Если по одному...

Приоритет логического И и инкремента/декремента
Согласно таблице приоритетов, приоритет инкремента и декремента выше, чем у логического И и по идее следующий код: 0 &amp;&amp; ++x ...

Вывод в поток и операция инкремента / декремента
При использовании следующего оператора вывода в поток: int n = 10; cout &lt;&lt; n++ &lt;&lt; ' ' &lt;&lt; n &lt;&lt; ' ' &lt;&lt; --n &lt;&lt; endl; ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru