- 此问题在此处已有答案**:
if statement integer(3个答案)
昨天关门了。
我有一个考试在uni从C和我是通过考试前几年,我偶然发现这个问题:执行以下序列后d
的值是多少?
int a=36, b=20, c=30, d;
d = c?(a? a: c):(b? c: b);
还有一个类似的练习,但在这些括号里有其他的表达:
d = (a>b) ? ((a>c)? a: c): ((b>c)? b: c);
我把这2个代码放在ChatGPT中,它告诉我它们被称为三元运算符。
我知道在第二个例子中,我们比较a
和b
,a
和c
,b
和c
,然后根据比较结果给d
一个值。但是在第一个例子中,没有比较,只有变量。而且,测试将在纸上进行。所以我不能在计算机上运行代码,我怎么理解第一个例子的语法,它的意思是什么,我还是在比较这三个变量,还是有什么不同?
我在CodeBlocks和VS上运行了两个练习的代码,使用了相同的值(a = 36
、b = 20
、c = 30
),它们都给了我相同的答案:
d = (a>b) ? ((a>c)? a: c): ((b>c)? b: c); //d = 36
以及
d = c?(a? a: c):(b? c: b); //d was still 36.
我不明白我是怎么从第二个练习中得到这个答案的。
2条答案
按热度按时间fnx2tebb1#
这是的条件运算符;它根据它的第一个操作数选择它的第二个或第三个操作数,这是一个条件。它是一个三元运算符;它有三个操作数。(但是函数调用
f(a, b)
也是如此,操作数为f
、a
和b
。)不要使用ChatGPT获取权威信息。C 2018 6.5.15 4规定了条件运算符:
计算第一个操作数...仅当第一个比较结果不等于0时才计算第二个操作数;仅当所述第一比较等于0时才评估所述第三操作数;结果是第二个或第三个操作数(无论哪个被求值)的值,其被转换为下面描述的类型。
因此,在
c?(a? a: c):(b? c: b)
中,c
被求值,并且条件运算继续:c
不为零,则计算(a? a: c)
。此操作继续:a
不为零,则计算a
。a
为零,则计算c
。c
为零,则计算(b? c: b)
。b
不为零,则计算c
。b
为零,则计算b
。对象标识符(
a
、b
或c
)的计算只会生成其值。由于c
不为零,因此选择(a? a: c)
。由于a
不为零,因此选择a
。a
为36。cotxawn72#
第一个三元语句:
等效于以下一系列if-else:
第二个:
等效于以下一系列if-else:
一些注意事项:
if (a)
等于if (a != 0)
。if (!a)
等于if (a == 0
。if
语句将任何非零值视为true,将零视为false。仅当条件表达式的计算结果为非零值时,才进入该块。