Привет, я знаю в C
modulo
отрицательного дивиденда приводит к отрицательному модулю, но я обнаружил, что по модулю отрицательного дивиденда с использованием длинного беззнакового делитель или длинный длинный неподписанный делитель приводит к положительному модулю!C Сбой работы модуля с отрицательным дивидендом и делителем длинный без знака
Вот пример:
#include <stdio.h>
int main(int argc, char** argv)
{
long long int a = -2205348223670655684LL;
printf("%lld %lld %lld %lld %lld %lld\n", a % 20, a % 20L, a % 20LL, a % 20U, a % 20LU, a % 20LLU);
return 0;
}
и выход:
$> ./a.out -4 -4 -4 -4 12 12
Может кто-нибудь объяснить, почему? Я попытался его с GCC 4.8 и 5.1
«По модулю отрицательного дивиденда результат отрицательный по модулю» неправильный. Это определяется реализацией. –
@ н.м. ... в более ранних стандартах C. – user694733
Также я знаю, что в pre C11 стандартно этот модуль с отрицательным знаком был специфичным для реализации, но в любом случае меня интересует также обоснование реализации, и я не могу найти в текущем стандарте все, что объясняет это поведение либо – tsilvestre