我在这个模量上做错了什么

What am I doing wrong with this modulus?

本文关键字:错了 什么      更新时间:2023-10-16

我编写了一个C 程序,该程序从用户接收一个数字并打印1(如果为正,则打印2),如果正面和奇数,请打印3,如果负面,则打印3,如果是负数,则打印4,如果负数和奇数,则打印4,如果零,打印0。这是我的代码:

#include <iostream>
using namespace std;
int main () {
int n;
cin>>n;
if (n>0 && n%2==0)
    cout <<"1";
else if (n>0 && n%2==!0)
    cout <<"2";
else if (n<0 &&  n%2==0)
    cout <<"3";
else if (n<0 && n%2==!0)
    cout <<"4";
else if (n==0)
cout <<"0";
return 0;
}

除了我输入负面和奇数时,一切都很好,除了第4个情况外,它在屏幕上什么也没打印,这意味着所有这些情况都不是真的,我在第4个情况下做错了什么,没有模量负数还是什么?

n % 2 != 0替换n%2==!0。额外的间距是我的个人口味。

n%2==!0由于运算符优先级而评估为n%2==(!0),并且!0等于1。令人疯狂的是,您拥有的方式非常适合正式n情况,但是它会破坏负n % 2情况,对于奇数负n,它从C 11开始返回-1。(在此之前,结果定义了。)