0% 2 выходит 1

0

У меня странная проблема. Вот ссылка на код, над которым я работаю, с вводом и выводом. Откроется фрагмент, на котором у меня проблема.

printf("before modulo r= %d ,ans =%d\n",r/b,ans );
ans=(ans)%2;
printf("after modulo r = %d ,ans =%d\n",r,ans);

Можно видеть, что во второй итерации перед выполнением строки 24 ans = 0, после этого она становится 1 вместо остатка 0 как 0% 2 = 0. Я действительно не могу понять проблему

Теги:
modulo

1 ответ

8
Лучший ответ

Ваша первая печать не печатает as, так как ваш b длинный long int, поэтому r/b - длинный длинный int, который имеет 64 бита, а первая печать будет печатать первые 32 бит как r и следующие 32 бит как ан. Для начала вам никогда не будет 0.

Пожалуйста, в следующий раз отправьте свой код, а не свяжите его.

  • 1
    В дополнение к этому - чтобы исправить вывод, замените %d на %lld или %lld (int)(r/b) . При использовании printf тип аргумента (после продвижения по умолчанию) должен соответствовать спецификатору, в противном случае поведение не определено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню