C++ 这句话是什么意思&引用;ret+;=(sx&x2B;ey)%2?3:1,sx++&引用;

C++ 这句话是什么意思&引用;ret+;=(sx&x2B;ey)%2?3:1,sx++&引用;,c++,C++,我刚才提到的声明在做什么 #include <bits/stdc++.h> using namespace std; int64_t dist(int64_t sx, int64_t sy, int64_t ex, int64_t ey) { sx += ey - sy; int64_t ret = (ey - sy)*2; if (sx%2 != ex%2) ret += (sx+ey)%2 ? 3 : 1, sx++; // i

我刚才提到的声明在做什么

#include <bits/stdc++.h> 
using namespace std;

int64_t dist(int64_t sx, int64_t sy, int64_t ex, int64_t ey) {
    sx += ey - sy;
    int64_t ret = (ey - sy)*2;
    if (sx%2 != ex%2)   
        ret += (sx+ey)%2 ? 3 : 1, sx++; // i don't understand this line,Please explain it.
    ret += (ex - sx)*2;
    return ret;
#包括
使用名称空间std;
int64_t dist(int64_t sx、int64_t sy、int64_t ex、int64_t ey){
sx+=ey-sy;
int64_t ret=(ey-sy)*2;
如果(sx%2!=ex%2)
ret+=(sx+ey)%2?3:1,sx++;//我不懂这行,请解释一下。
ret+=(ex-sx)*2;
返回ret;

这是一个三元条件运算符,允许您在为变量赋值时避免多语句
if
-
else
构造。 使用它的形式是

变量=条件?值如果为真:值如果为假

+=
运算符向某个变量添加一个值,等于
ret=(ret+(sx+ey)%2?3:1,sx++;

%
运算符用于计算两个数字的余数

++
用于将
1
添加到给定变量,在本例中,它在将
1
添加到
ret
后立即执行(如果该行上的条件为false)

无论如何,正如注释中所指出的,这段代码确实是不可读的,如果我们把它分成几个语句,就不会有什么不好的事情发生

如果(sx%2!=ex%2){
如果((cx+ey))%2){
ret+=3;
}否则{
ret++;
}
sx++;
}

这是一个三元条件运算符,允许您在为变量赋值时避免多语句
if
-
else
构造。 使用它的形式是

变量=条件?值如果为真:值如果为假

+=
运算符向某个变量添加一个值,等于
ret=(ret+(sx+ey)%2?3:1,sx++;

%
运算符用于计算两个数字的余数

++
用于将
1
添加到给定变量,在本例中,它在将
1
添加到
ret
后立即执行(如果该行上的条件为false)

无论如何,正如注释中所指出的,这段代码确实是不可读的,如果我们把它分成几个语句,就不会有什么不好的事情发生

如果(sx%2!=ex%2){
如果((cx+ey))%2){
ret+=3;
}否则{
ret++;
}
sx++;
}

此代码非常紧凑

要理解它,您必须熟悉不太常见的运算符以及

更不用说整数值可以用作布尔值()

最后,将表达式连接起来,最后一个表达式提供最终结果(在本例中,它被丢弃,因此只使用副作用)

可以用不太紧凑的形式编写:

if (((sx + ey) % 2) != 0) { // Is the sum of sx and ey odd (not even)
  ret += 3; // add 3 to ret
} else {
  ret += 1; // add 1 to ret
}
++sx; // increment sx

这段代码非常紧凑

要理解它,您必须熟悉不太常见的运算符以及

更不用说整数值可以用作布尔值()

最后,将表达式连接起来,最后一个表达式提供最终结果(在本例中,它被丢弃,因此只使用副作用)

可以用不太紧凑的形式编写:

if (((sx + ey) % 2) != 0) { // Is the sum of sx and ey odd (not even)
  ret += 3; // add 3 to ret
} else {
  ret += 1; // add 1 to ret
}
++sx; // increment sx

写这篇文章的人试图让事情变得不可读。如果
(sx+ey)%2
等于1,然后将3添加到
ret
中,否则将1添加到
ret
中。然后增加
sx
除了它编译的内容,这一行意味着作者讨厌其他人。我想知道反对票的情况。是的,所有这些都可以通过研究发现,但这对SO中的大多数问题都是正确的。似乎有一个原因ns表示,注释的表达式很难阅读。因此,对于入门级程序员来说,这可能是一项非常具有挑战性的任务,很有可能会迷路。我可以理解,OP发现这值得一提。@Arafat这样编写的代码编写得很糟糕。这样的混淆不应该在专业代码中完成。编写此代码的人正在尝试使事物不可读。如果
(sx+ey)%2
等于1,然后将3添加到
ret
中,否则将1添加到
ret
中。然后增加
sx
除了它编译的内容,这一行意味着作者讨厌其他人。我想知道反对票的情况。是的,所有这些都可以通过研究发现,但这对SO中的大多数问题都是正确的。似乎有一个原因ns表示,注释的表达式很难阅读。因此,对于入门级程序员来说,这可能是一项非常具有挑战性的任务,很有可能会迷路。我可以理解,OP觉得这值得一提。@Arafat这样编写的代码编写得很糟糕。像这样的混淆不应该在专业代码中进行。