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

C 是否定义了添加逻辑运算结果的行为,c,relational-operators,C,Relational Operators,将逻辑运算的结果相加(因为它们应该是0或1)可以吗(定义的行为) 如果我想计算大于零的数字,我可以这样做吗?(或者有更好的方法吗?) inta[3]={1,-5,3}; int结果=0; 对于(int i=0;i0; } 引用C11,第§6.5.8章(重点) 每个运算符(大于),= (大于或等于)如果指定的关系为真,则应产生1,如果为真,则产生0 false.107)结果的类型为int 然后执行复合赋值,其中需要 仅对于运算符+=和-=而言,左操作数应为原子操作数、限定操作数或限定操作数 指向完

将逻辑运算的结果相加(因为它们应该是
0
1
)可以吗(定义的行为)

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

inta[3]={1,-5,3};
int结果=0;
对于(int i=0;i0;
}

引用
C11
,第§6.5.8章(重点)

每个运算符
(大于),
=
(大于或等于)如果指定的关系为真,则应产生
1
,如果为真,则产生
0
false.107)结果的类型为
int

然后执行复合赋值,其中需要

仅对于运算符
+=
-=
而言,左操作数应为原子操作数、限定操作数或限定操作数 指向完整对象类型的非限定指针,右边为整数类型;或者这个 左操作数应具有原子、限定或非限定算术类型,右操作数应具有原子、限定或非限定算术类型 应具有算术类型。

表达式满足约束条件

因此,是的,这是一种被定义的行为


也就是说,从语法的角度来看,您之所以安全,是因为默认值符合您的期望。这本身没有问题,但直言不讳(因此,当然)永远不会有坏处

您可以将表达式重写为

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

a[i]>0
是0或1。是的,它被定义了。是的,它是完美的代码。所有布尔运算(如关系运算符)都保证返回值为1或0的
int
。您知道在您的头顶上哪里可以找到标准的相关部分吗?或者你怎么能这么快?^^@KamiKaze第6.5章列出了所有操作员组,因此只需打开pdf并单击相关组即可:)@Lundin我想我将放弃下一本我想读的书,转而阅读完整的标准。这样我就知道在哪里可以找到what@StoryTeller:修正了双重否定:-)。@KamiKaze-如果你想快速学习这门语言,标准是一个非常糟糕的资源。你最好先读完这本书,然后按标准毕业。
 result += ( a[i] > 0 );