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

Как работает данный код, использующий декремент и тернарный оператор?

07.12.2014, 16:07. Показов 1898. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
{
    byte a = 2, b = 3;
    byte c = a == b-- ? a : b; 
    Console.WriteLine(c);
    Console.ReadKey();
}
почему консоль двойку выводит? я не понимаю - ну должна же 3 а выводит 2-ку

Добавлено через 7 минут
т.е. получается до readKey значение переменной b успевает измениться
но если бы b-- было после двоеточия этого бы не произошло - почему?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2014, 16:07
Ответы с готовыми решениями:

Как работает тернарный оператор
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color == 'W') ? 'B' : 'W';

Как работает тернарный условный оператор?
Всем привет выражение return (two % 2 == 0) ? (2 * Method(one / 2, two / 2)) : (Method(one / 2,...

Функция нахождения общего делителя, как работает тернарный оператор?
Вот ф-я нахождения наименьшего общего делителя int gcd(int x, int y) { return y ? gcd(y,...

Тернарный оператор - пояснить код
Вводим числа 1234 = 1+2+3+4 -> 10 #include <stdio.h> int main() { int x1,x2,x3,x4,x5,x6;...

4
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
07.12.2014, 16:17 2
Цитата Сообщение от jashik Посмотреть сообщение
почему консоль двойку выводит? я не понимаю - ну должна же 3 а выводит 2-ку
должна вывести 2-ку она ее и выводит, почитай про работу тернарного оператора
если условие выполняется, то берется значение до двоеточия, иначе после двоеточия
0
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 77
07.12.2014, 16:55  [ТС] 3
"должна вывести 2-ку она ее и выводит" - меня смущает эта фраза. Если смотреть по F11 - то высказывание a==b-- равно false
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
07.12.2014, 17:02 4
Цитата Сообщение от jashik Посмотреть сообщение
Если смотреть по F11 - то высказывание a==b-- равно false
да верно , и оно выводит значение b которое 2
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
08.12.2014, 10:58 5
Лучший ответ Сообщение было отмечено jashik как решение

Решение

jashik,
Цитата Сообщение от jashik Посмотреть сообщение
C#
1
2
3
4
5
6
{
byte a = 2, b = 3;
byte c = a == b-- ? a : b; 
Console.WriteLine(c);
Console.ReadKey();
}
Смотрим пошагово, чё происходит при вызове тернарки "за кулисами".
C#
1
byte c = a == b-- ? a : b;
превращается в
C#
1
2
3
4
5
byte c; 
if(a == b--)
    c = a;
else
    c = b;
Итак, у нас a = 2, а b = 3. Декремент b находится в постфиксной форме, а значит выполнится в конце (но не в конце тернарки, а в конце сравнения!) То есть a == b-- (false), но после сравнения b уменьшается и выводится.
1
08.12.2014, 10:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2014, 10:58
Помогаю со студенческими работами здесь

Тернарный оператор с decimal? и Null не работает
Почему тернарный оператор с типом decimal? и значением Null не работает? Однако если написать...

Почему так работает тернарный оператор?
Всем ку! $result = true ? 0 : false ? 100 : 200; var_dump($result); Почему выводит 200, а...

Как переделать в тернарный оператор этот if
if( a>5) { MessageBox.Show("More"); } else ...

Обьясните пожайлуста как и что делает данный оператор в этом выражении fState [x][y] ^= 1;. Неполный код привожу ниже.
Вот код программы из книжки Ч. Петзолд (Програмирование для Windows® 95) #define DIVISIONS 5 ......


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru