gpt4 book ai didi

c - 添加逻辑运算的结果是否定义了行为

转载 作者:行者123 更新时间:2023-12-04 12:47:47 26 4
gpt4 key购买 nike

将逻辑运算的结果相加(因为它们应该只是 01)是否可以(定义的行为)?

如果我想计算大于零的数字,我可以做这样的事情吗?(或者有更好的方法吗?)

int a[3] = {1,-5,3};
int result = 0;
for( int i = 0 ; i<3; i++)
{
result += a[i]>0;
}

最佳答案

引用 C11 , 第 6.5.8 章,(强调我的)

Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false.107) The result has type int.

然后你正在执行一个复合作业,它需要

For the operators += and -= only, either the left operand shall be an atomic, qualified, or unqualified pointer to a complete object type, and the right shall have integer type; or the left operand shall have atomic, qualified, or unqualified arithmetic type, and the right shall have arithmetic type.

并且您的表达式满足约束条件。

所以是的,这是定义的行为。


也就是说,从语法的角度来看,您之所以安全是因为默认的 operator precedence符合您的期望。本身没有问题,但明确(因此,确定)永远不会有坏处。

您可以将表达式重写为

 result += ( a[i] > 0 );

关于c - 添加逻辑运算的结果是否定义了行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953267/

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