(3 * - * p / (* q) +7) = 6 как это работает? - PullRequest
0 голосов
/ 12 декабря 2018
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, может кто-нибудь помочь

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Из-за приоритет оператора и ассоциативность
3* -*p/(*q)+7 совпадает с
(3 * - 3)/5 + 7, что совпадает с
-9/5 + 7, что из-за целочисленного деления такое жекак
-1 + 7, что совпадает с

6
0 голосов
/ 12 декабря 2018

Принимая во внимание правила предшествования, которые неявно кодируются в грамматике языка C , 3* -*p/(*q)+7 равно ((3 * (-*p)) / (*q)) + 7.

Результат -9 / 5 равен -1 потому что / представляет здесь целочисленное деление.

Результат -1 + 7 равен 6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...