Почему одно и то же логическое уравнение возвращает 2 разных результата в python и c ++? - PullRequest
0 голосов
/ 28 октября 2019

Я сделал прототип кода на python, чтобы посмотреть, работает ли логика, и позже кодировал его в c ++. Но почему-то версия Python и версия C ++ дают разные результаты. Я не могу понять, почему это так.

Я прошел через это конкретное логическое уравнение много раз и убедился, что они точно такие же, за исключением различий, таких как (или, ||) и (и,&&).

python

i = -6
j = -5
pos_i = 0
pos_j = 0
print((i%2==0)and((((i/2)%2==0)and(j%2==0))or(((i/2)%2==1)and(j%2==1))))

c ++

int i = -6;
int j = -5;
int pos_i = 0;
int pos_j = 0;
cout << (i%2==0)&&((((i/2)%2==0)&&(j%2==0))||(((i/2)%2==1)&&(j%2==1)));

ожидается: -

python ===> True

c ++ =====> 1

актуально: -

python ===> True

c ++ =====> 0

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Потому что в c ++ i / 2 становится целым числом, в то время как в Python он становится float. Оттуда вы делаете логику с разными значениями. Если вы хотели то же самое, вы должны использовать

    print((i%2==0)and((((i//2)%2==0)and(j%2==0))or(((i//2)%2==1)and(j%2==1))))
0 голосов
/ 28 октября 2019

Другой ответ о целочисленном делении правильный, но здесь проблема не в этом. Единственное деление, которое здесь происходит, это -6, деленное на 2, поэтому использование оператора целочисленного деления // не изменит результат.

Правильный ответ заключается в том, что оператор по модулю работает по-разному в Python и C ++: Link .

В отличие от C или C ++, оператор модуля Python (%) всегда возвращает число, имеющее тот же знак, что и знаменатель (делитель).

-1% 2 в C ++ даст -1, а не 1, как вы ожидаете.

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