int i=3,j=5; int *p, *q; p = &i; q = &j; printf("%d\n", 3* -*p/(*q)+7);
Компилятор говорит, что результат равен 6, но я не могу понять, как, для меня это было (-9/12) = -0,74 или 0, потому что это int, может кто-нибудь помочь
Из-за приоритет оператора и ассоциативность 3* -*p/(*q)+7 совпадает с (3 * - 3)/5 + 7, что совпадает с -9/5 + 7, что из-за целочисленного деления такое жекак -1 + 7, что совпадает с
3* -*p/(*q)+7
(3 * - 3)/5 + 7
-9/5 + 7
-1 + 7
6
Принимая во внимание правила предшествования, которые неявно кодируются в грамматике языка C , 3* -*p/(*q)+7 равно ((3 * (-*p)) / (*q)) + 7.
((3 * (-*p)) / (*q)) + 7
Результат -9 / 5 равен -1 потому что / представляет здесь целочисленное деление.
-9 / 5
-1
/
Результат -1 + 7 равен 6.