Может ли кто-нибудь объяснить мне вывод следующего. Я попытался все рассуждать и могу объяснить более позднюю часть, где «x» присваивается значение выражения, но не может понять, как ответ отличается в заявлении printf !!!унарные операторы в printf
Различные компиляторы могут вести себя по-разному. Было бы здорово, если бы кто-нибудь мог объяснить это поведение для любого компилятора.
Я использую GCC (SUSE Linux) 4.6.2 на OpenSUSE 12.1 (Asparagus) (i586)
код:
#include<stdio.h>
int main()
{
unsigned int x=0;
printf("expr= %d x=%d\n",(x^x),x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++||++x,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++||++x||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",++x||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",x++||++x||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++||++x||x++,x);
printf("x=%d\n",x);
x=0;
(x^=x);
printf("x=%d\n",x);
x=0;
(x^=x)||x++;
printf("x=%d\n",x);
x=0;
(x^=x)||x++||++x;
printf("x=%d\n",x);
x=0;
(x^=x)||x++||++x||x++;
printf("x=%d\n",x);
return 0;
}
выход:
expr= 0 x=0
x=0
expr= 0 x=1
x=1
expr= 1 x=2
x=2
expr= 1 x=2
x=2
expr= 0 x=1
x=1
expr= 1 x=1
x=1
expr= 1 x=2
x=2
expr= 1 x=2
x=2
x=0
x=1
x=2
x=2
Благодаря
Это код. Пожалуйста, укажите **, которые ** вы не понимаете (еще лучше, просто удалите все, что вы понимаете). –
Я постоянно удивляюсь количеству сдвигов людей, которые хотят до и после увеличивать переменную между точками последовательности ... почему? –
@EdS .: '||' - это точка последовательности. –