А>#include <stdio.h>
А>void main()
А>{
А> int x = 0;
А> if (x = 0 || x++)
А> printf("%d\n", x);
А> printf("%d\n", x);
А>}
А>
А>что выдаст и почему?
А>
это равносильно:
x = 0;
bool result = x != 0;
x ++;
ASSERT (result == false);
if (result) // этот код линковщик выкинит
printf(...)
ASSERT (x == 1);
printf(...); // останется только это
А>#include <stdio.h>
А>void main()
А>{
А> int x = 0;
А> if (x = 0 || x++)
А> printf("%d\n", x);
А> printf("%d\n", x);
А>}
А>
А>что выдаст и почему?
Выдаст 1.
x = 0 — присвоится 0 , но булево значение false. Выполняем условие поcле ||.
x++ — булево значение false; значит, первый printf не выполнится.
После if x равен 1.
Здравствуйте, _wind_, Вы писали:
__>Здравствуйте, Аноним, Вы писали:
А>>Именно такой код: А>>
А>>#include <stdio.h>
А>>void main()
А>>{
А>> int x = 0;
А>> if (x = 0 || x++)
А>> printf("%d\n", x);
А>> printf("%d\n", x);
А>>}
А>>
А>>что выдаст и почему?
А>>
__>1
проверил. Выдаёт 0.
почему x++ не увеличивает значение икса?
Если первый операнд оператора || есть false, то должен выполниться и второй опреанд!
С уважением,
Денис
Re: if (x = 0 || x++)
От:
Аноним
Дата:
22.02.05 13:05
Оценка:
Vse ponimayu, no pochemu 0 a ne 1?
Prichem esli sdelat' ++x to togda 1, 1. Eto ponyatno. A vot x++ poluchaetsya ne updeytaet peremennuyu v sluchae esli if ne vipolnyaetsya. Esche prikol'noe povedenie:
> Выдаст 1. > > x = 0 — присвоится 0 , но булево значение false. Выполняем условие поcле ||. > x++ — булево значение false; значит, первый printf не выполнится. > После if x равен 1.
BCB даёт один "0"
Posted via RSDN NNTP Server 1.9
Re[2]: Po prikolu potestil v JScripte :)
От:
Аноним
Дата:
22.02.05 13:09
Оценка:
Pochti toje samoe, tol'ko dlya sluchaya if (x=3 || x++) budet ne 1, 1, A 3, 3
А>#include <stdio.h>
А>void main()
А>{
А> int x = 0;
А> if (x = 0 || x++)
А> printf("%d\n", x);
А> printf("%d\n", x);
А>}
А>
А>что выдаст и почему?
А>
хе-хе — 0
смотрим:
if (x = 0 || x++)
если бы это воспринималось как
if ((x = 0) || x++)
то написалось бы 1 (ибо 0 || 1 есть true) (два раза)
но! из-за различного присиденса, изначальное выражение эквивалентно:
if (x = (0 || x++))
результатом (0||x++), при начальном x=0 является false (0). сразу после "выполнения" || значение x увеличивается на 1, но затем выполняется operator=() b и икс опять обнуляется. поэтому значение в if() есть false, а x=0.
Ы
Здравствуйте, DeadAdmin, Вы писали:
>> Выдаст 1. >> >> x = 0 — присвоится 0 , но булево значение false. Выполняем условие поcле ||. >> x++ — булево значение false; значит, первый printf не выполнится. >> После if x равен 1.
DA>BCB даёт один "0"
Я понял свою ошибку.