gpt4 book ai didi

c++ - 按位和/或使用三元运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:24 28 4
gpt4 key购买 nike

看看这个小片段。

y<v|!v?:y=v;

(y为最小值,v为当前比较值,这样更容易思考。)

这段代码的意思很简单。
如果当前值 v 小于最小值 y,则设置新的最小值 (y=v)。但是 v=0 的情况被排除在外。

然后我想如果可以生成“不良代码”,结果应该是一样的。我的意思是,

y>v&v?y=v:;

这段代码应该做同样的事情。但是不能编译。错误如下。

error: expected expression
for(int v: a) v=abs(a[i]-v), x>v?:x=v, y>v&v?y=v:;
^

这很奇怪。我认为两个代码彼此相同。如果后面的三元运算符是错误的,前者应该有同样的问题。但它没有。

谁能解释一下为什么?

下一个问题。我插入了一个 0 来编译。 y>v&v?y=v:0;
然后我得到了一个错误的答案。所以我把&改成了&&y>v&&v?y=v:0;
最后我得到了正确的答案。但是没有这些过程,使用 | 运算符就可以完成所有工作。为什么?

<附加信息>

我的编译版本如下

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix

和编译选项:

g++ -std=c++11 my.cpp

如果你想有一个示例代码来测试,这会有所帮助。

#include <iostream>
#include <vector>
using namespace std;
int working(int i, vector<int> a) {
int y=INT_MAX;
for(int v: a) v=abs(a[i]-v), y<v|!v?:y=v;
return y;
}

int not_working(int i, vector<int> a) {
int y=INT_MAX;
for(int v: a) v=abs(a[i]-v), y>v&v?y=v:0;
return y;
}

int main() {
vector<int> b({-5,-2,2,7});
cout << working(2, b) << endl;
cout << not_working(2,b) << endl;
return 0;
}

(p.s. 总是欢迎纠正我糟糕的英语)

最佳答案

代码不做同样的事情,因为条件不是彼此的否定。试试 y == 3, v == 2 :

y < v | !v => 3 < 2 | !2 => false | !true => false | false => 0 | 0 => 0

y > v & v => 3 > 2 & 2 => true & 2 => 1 & 2 => 0

关于c++ - 按位和/或使用三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32052867/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com