if (x = 0 || x++)
От: Аноним  
Дата: 22.02.05 12:36
Оценка: 17 (3) :))
Именно такой код:
#include <stdio.h>

void main()
{
    int x = 0;
    if (x = 0 || x++) 
        printf("%d\n", x);

    printf("%d\n", x);
}

что выдаст и почему?

Re: if (x = 0 || x++)
От: Аноним  
Дата: 22.02.05 12:40
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#include <stdio.h>

А>void main()
А>{
А>    int x = 0;
А>    if (x = 0 || x++) 
А>        printf("%d\n", x);

А>    printf("%d\n", x);
А>}
А>

А>что выдаст и почему?

А>


разве не
1
1
Re: if (x = 0 || x++)
От: Аноним  
Дата: 22.02.05 12:42
Оценка:
Здравствуйте, Аноним, Вы писали:


0
Re: if (x = 0 || x++)
От: DeadAdmin Латвия http://www.livejournal.com/users/dedmazaj
Дата: 22.02.05 12:44
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#include <stdio.h>

А>void main()
А>{
А>    int x = 0;
А>    if (x = 0 || x++) 
А>        printf("%d\n", x);

А>    printf("%d\n", x);
А>}
А>

А>что выдаст и почему?

А>


0
0
Re: if (x = 0 || x++)
От: kmn Украина  
Дата: 22.02.05 12:48
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#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(...);         // останется только это
Re: if (x = 0 || x++)
От: _wind_ Россия  
Дата: 22.02.05 12:50
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#include <stdio.h>

А>void main()
А>{
А>    int x = 0;
А>    if (x = 0 || x++) 
А>        printf("%d\n", x);

А>    printf("%d\n", x);
А>}
А>

А>что выдаст и почему?

А>


1
С уважением,
Денис
Re: if (x = 0 || x++)
От: King Oleg Украина http://kingoleg.livejournal.com
Дата: 22.02.05 12:57
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#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.
King Oleg
*Читайте DOC'и, они rules*
Re[2]: if (x = 0 || x++)
От: _wind_ Россия  
Дата: 22.02.05 12:58
Оценка:
Здравствуйте, _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:

if (x = 3 || x++) vidast 1, 1 Iz toy je opery...
Re[2]: if (x = 0 || x++)
От: DeadAdmin Латвия http://www.livejournal.com/users/dedmazaj
Дата: 22.02.05 13:06
Оценка:
> Выдаст 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
Re: if (x = 0 || x++)
От: Tan4ik Россия  
Дата: 22.02.05 13:11
Оценка: 45 (4) +1
Здравствуйте, Аноним, Вы писали:

А>Именно такой код:


А>что выдаст и почему?


выдаст просто 0, ибо
#include <stdio.h>

void main()
{
    int x = 0;
    if (x = (0 || x++)) 
        printf("%d\n", x);

    printf("%d\n", x);
}
---
С уважением,
Лазарев Андрей
Re: if (x = 0 || x++)
От: hemmul США  
Дата: 22.02.05 13:11
Оценка: 27 (2)
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#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.
Ы

vox clamantis in deserto
Re: if (x = 0 || x++)
От: woody Украина http://woodpecker.org.ua
Дата: 22.02.05 13:21
Оценка:
Здравствуйте, Аноним, Вы писали:
[skip]
А>что выдаст и почему?
А> if (x = 0 || x++)

Если рассмотреть выражение в скобках, то получим:
[x = 0 || x++] --> [x = (0 || x++)] --> [x = (x++, 0 || 0)] --> [x = 0]

Также, я думаю, понятно почему (x = <non-zero> || x++) даст две 1.

ЗЫ Скобки как всегда рулят (для контроля над приоритетом операций)
Re[3]: if (x = 0 || x++)
От: King Oleg Украина http://kingoleg.livejournal.com
Дата: 22.02.05 13:22
Оценка:
Здравствуйте, DeadAdmin, Вы писали:

>> Выдаст 1.

>>
>> x = 0 — присвоится 0 , но булево значение false. Выполняем условие поcле ||.
>> x++ — булево значение false; значит, первый printf не выполнится.
>> После if x равен 1.

DA>BCB даёт один "0"

Я понял свою ошибку.
King Oleg
*Читайте DOC'и, они rules*
Re[2]: if (x = 0 || x++)
От: woody Украина http://woodpecker.org.ua
Дата: 22.02.05 13:25
Оценка: 5 (1)
Здравствуйте, hemmul, Вы писали:
H>если бы это воспринималось как
H>
H>if ((x = 0) || x++)
H>

H>то написалось бы 1 (ибо 0 || 1 есть true) (два раза)

Один раз, ибо x++ — постинкремент и там было бы 0 || 0 — false
Re[3]: if (x = 0 || x++)
От: hemmul США  
Дата: 22.02.05 13:29
Оценка:
Здравствуйте, woody, Вы писали:

W>Здравствуйте, hemmul, Вы писали:

H>>если бы это воспринималось как
H>>
H>>if ((x = 0) || x++)
H>>

H>>то написалось бы 1 (ибо 0 || 1 есть true) (два раза)

W>Один раз, ибо x++ — постинкремент и там было бы 0 || 0 — false


угу

vox clamantis in deserto
Re: if (x = 0 || x++)
От: BlackHeretic Израиль  
Дата: 22.02.05 13:48
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#include <stdio.h>

А>void main()
А>{
А>    int x = 0;
А>    if (x = 0 || x++) 
А>        printf("%d\n", x);

А>    printf("%d\n", x);
А>}
А>

А>что выдаст и почему?

А>



Думаю что выдаст 1 и все. х станет равен 1 только после окончания вычисления логического выражения.
ICQ 156156278
Re: if (x = 0 || x++)
От: WinterMute Россия http://yarrr.ru
Дата: 22.02.05 13:59
Оценка:
Выдаст 0. Из-за коротких вычислений условий.
Re: if (x = 0 || x++)
От: Areg Россия  
Дата: 22.02.05 14:38
Оценка: +1
Здравствуйте, Аноним, Вы писали:


А>Именно такой код:

А>
А>#include <stdio.h>

А>void main()
А>{
А>    int x = 0;
А>    if (x = 0 || x++) 
А>        printf("%d\n", x);

А>    printf("%d\n", x);
А>}
А>

А>что выдаст и почему?

А>


0 или 1 в зависимости в каком порядке компилятор вычислит арифметические выражения х=0 и х++.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.