инкременты и декременты в java - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 20.01.2013, 12:12   #1
Пользователь

Автор темы (Топик Стартер) инкременты и декременты в java

PHP код:
int a2
+= --* ++a++ +a++; 

int c2
+= --* ++c++ +c--; 

System.out.println(a); 
System.out.println(c); 

a==10 
c
==10 
Поясните, пожалуйста, как происходит вычесление.
niko42 вне форума Ответить с цитированием
Непрочитано 20.01.2013, 12:32   #2
Аватар для Lihoy
Герой

По умолчанию Re: инкременты и декременты в java

Цитата:
Сообщение от niko42 Посмотреть сообщение
Поясните, пожалуйста, как происходит вычесление.
PHP код:
int a2
+= --* ++a++ +a++; 
2      1   1     2   2    3

int c
2
+= --* ++c++ +c--; 
2      1   1     2   2    3

System
.out.println(a); 
System.out.println(c); 

a==10 
c
==10 
В случае, когда используется постфиксный инкремент/декремент (а++ или а--), то сначала возвращается значение переменное, после чего увеличивается/уменьшается ее значение на 1.

С префиксным инкрементом/декрементом (++а или --а), наоборот, сначала увеличивается/уменьшается значение на 1, затем значение переменной возвращается.
Lihoy вне форума Отправить сообщение для Lihoy с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 20.01.2013, 12:40   #3
Пользователь

Автор темы (Топик Стартер) Re: инкременты и декременты в java

Цитата:
Сообщение от Lihoy Посмотреть сообщение
PHP код:
int a2
+= --* ++a++ +a++; 
2      1   1     2   2    3

int c
2
+= --* ++c++ +c--; 
2      1   1     2   2    3

System
.out.println(a); 
System.out.println(c); 

a==10 
c
==10 
В случае, когда используется постфиксный инкремент/декремент (а++ или а--), то сначала возвращается значение переменное, после чего увеличивается/уменьшается ее значение на 1.

С префиксным инкрементом/декрементом, наоборот, сначала увеличивается/уменьшается значение на 1, затем значение переменной возвращается.
Спасибо. Как бы это действие понятно: --a + a * ++a переведем 1 +1*2
Интересует следующие действие: + a++ +a++

Добавлено через 2 минуты
Если более детально.
То не пойму логики
int a= 2;
a = a++;
а == 2

int a= 2;
a = a++ + a++;
а == 5
Почему первая операция без изменений, а вторая изменяет.

Я так понимаю в постфиксный операции - в первой операции мы тупо возвращаем значение, а во второй уже увеличиваем. Верно ли суждение?

Последний раз редактировалось niko42; 20.01.2013 в 12:46. Причина: Добавлено сообщение
niko42 вне форума Ответить с цитированием
Непрочитано 20.01.2013, 12:48   #4
Аватар для Lihoy
Герой

По умолчанию Re: инкременты и декременты в java

Цитата:
Сообщение от niko42 Посмотреть сообщение
Спасибо. Как бы это действие понятно: --a + a * ++a переведем 1 +1*2
Интересует следующие действие: + a++ +a++
После "--a + a * ++a" значение а составляло 2.
Теперь переходим к "a++ + a++".

а++ = 2 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 2, затем увеличили а на 1. Таким образом, сейчас значение а составляет 3)

a++ = 3 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 3, затем увеличили а на 1. Таким образом, сейчас значение а составляет 4, которое, к слову, далее нигде уже в расчете принимать участие не будет).

В итоге:
a = 2 + 1 + 1*2 + 2 + 3 = 10

UPD.
Цитата:
Если более детально.
То не пойму логики
int a= 2;
a = a++;
а == 2

int a= 2;
a = a++ + a++;
а == 5
Почему первая операция без изменений, а вторая изменяет.
Потому, что в первом случае:
1. мы вернули значение 2
2. увеличили а на 1 (в памяти оно стало 3)
3. но потом значению а было присвоено значение 2 (которое мы вернули ранее).

Во втором же случае:
1. мы для первого слагаемого (а++) вернули значение 2
2. увеличили значение а на 1 (в памяти оно стало 3)
3. для второго слагаемого (а++) вернули значение 3 (т.к. ранее увеличили а на 1)
4. опять увеличили значение а на 1 (в памяти оно стало 4)
5. но в итоге, присвоили значению а (которое в памяти 4) значение суммы 2 + 3 = 5.
Lihoy вне форума Отправить сообщение для Lihoy с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 20.01.2013, 12:54   #5
Пользователь

Автор темы (Топик Стартер) Re: инкременты и декременты в java

Цитата:
Сообщение от Lihoy Посмотреть сообщение
После "--a + a * ++a" значение а составляло 2.
Теперь переходим к "a++ + a++".

а++ = 2 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 2, затем увеличили а на 1. Таким образом, сейчас значение а составляет 3)

a++ = 3 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 3, затем увеличили а на 1. Таким образом, сейчас значение а составляет 4, которое, к слову, далее нигде уже в расчете принимать участие не будет).

В итоге:
a = 2 + 1 + 1*2 + 2 + 3 = 10

UPD.


Потому, что в первом случае, мы вернули значение 2, увеличили а на 1 (в памяти оно стало 3), но потом значению а было присвоено значение 2 (которое мы вернули ранее).

Во втором же случае, мы для первого слагаемого (а++) вернули значение 2, увеличили значение а на 1 (в памяти оно стало 3), для второго слагаемого (а++) вернули значение 3 (т.к. ранее увеличили а на 1), опять увеличили значение а на 1 (в памяти оно стало 4). Но в итоге, присвоили значению а (которое в памяти 4) значение суммы 2 + 3 = 5.
Воо огромное спасибо. Все понятно.

Если кому интересно:
PHP код:
//алгоритм не четных чисел
        
for(int i=0i<10i++){
            
System.out.println(++i);
        }
        
//алгоритм четный чисел
        
for(int i=0i<10i++){
            
System.out.println(i++);
        } 
Добавлено через 10 минут
Lihoy:
Смотрите еще такой момент:
int a = 2;
a += --a + a * ++a + a++ +a++;
Выполнили все операции постфиксные и префиксные, в итоге сейчас в int a лежит 4 (исходя из последней постфиксной операции)
То почему
2 + = 1 + 1*2 + 2 + 3 = 10

а не

4 + = 1 + 1*2 + 2 + 3 = 12

Последний раз редактировалось niko42; 20.01.2013 в 13:06. Причина: Добавлено сообщение
niko42 вне форума Ответить с цитированием
Непрочитано 20.01.2013, 13:34   #6
Аватар для bloodshed
Герой

По умолчанию Re: инкременты и декременты в java

2 += 1 + 1*2 + 2 + 3 (a)
2 += 1 + 1*2 + 2 + 3 (c)

последние ++ и -- не дают ничего

Добавлено через 2 минуты
первая a у вас не менятся при операциях справа от знака равенства
__________________

Последний раз редактировалось bloodshed; 20.01.2013 в 13:37. Причина: Добавлено сообщение
bloodshed вне форума Отправить сообщение для bloodshed с помощью ICQ Отправить сообщение для bloodshed с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 20.01.2013, 13:51   #7
Пользователь

Автор темы (Топик Стартер) Re: инкременты и декременты в java

Цитата:
Сообщение от bloodshed Посмотреть сообщение
2 += 1 + 1*2 + 2 + 3 (a)
2 += 1 + 1*2 + 2 + 3 (c)

последние ++ и -- не дают ничего

Добавлено через 2 минуты
первая a у вас не менятся при операциях справа от знака равенства
Все ясно спасибо.
niko42 вне форума Ответить с цитированием
Непрочитано 20.01.2013, 14:00   #8
Аватар для Lihoy
Герой

По умолчанию Re: инкременты и декременты в java

Цитата:
Сообщение от niko42 Посмотреть сообщение
Lihoy:
Смотрите еще такой момент:
int a = 2;
a += --a + a * ++a + a++ +a++;
Выполнили все операции постфиксные и префиксные, в итоге сейчас в int a лежит 4 (исходя из последней постфиксной операции)
То почему
2 + = 1 + 1*2 + 2 + 3 = 10

а не

4 + = 1 + 1*2 + 2 + 3 = 12
Потому, что изначальное выражение a += --a + a * ++a + a++ +a++;
эквивалентно a = a + --a + a * ++a + a++ +a++;

А т.к. изначально а у нас равно 2, имеем то, что имеем
Lihoy вне форума Отправить сообщение для Lihoy с помощью ICQ Ответить с цитированием
Непрочитано 20.01.2013, 14:29   #9
Пользователь

Автор темы (Топик Стартер) Re: инкременты и декременты в java

Цитата:
Сообщение от Lihoy Посмотреть сообщение
Потому, что изначальное выражение a += --a + a * ++a + a++ +a++;
эквивалентно a = a + --a + a * ++a + a++ +a++;

А т.к. изначально а у нас равно 2, имеем то, что имеем
Весело=) Благодарю!
niko42 вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка ГС! keksar Серверная часть 29 21.02.2011 20:55
Крепости (осады) Romanz Серверная часть 125 31.07.2010 18:12
баги и недочёты сервака Devilop Серверная часть 21 03.06.2010 23:50
Зависает после выбора сервера! Nales Серверная часть 8 09.05.2010 12:55


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 09:33. Часовой пояс GMT +3.

Вверх