c - 为什么变量没有增加?

标签 c logical-operators

增量运算符不工作。

我在学习C语言表达式。我还在变量上尝试了不同的增量运算符组合(前缀和后缀),但输出结果是相同的。

int i=-3, j=2 ,k=0,m;

m=++i&&++j||++k;

printf("%d%d%d%d\n",i,j,k,m);  

我希望输出为 -2311 但结果是 -2301

最佳答案

ij 递增,因为 i 需要计算。 j 也需要计算,因为 i 不为零。

但是由于这个组合表达式是非零的,|| 短路,并且 k++ 不被评估或执行。

另一方面,按位运算符不会短路。他们也不转换为 bool 值。如果您想评估所有条件并保持相同的结果,您可以这样写

m= (!!++i) & (!!++j) | (!!++k);

使用双重否定技巧将整数值转换为 bool 值。

或者省去另一条语句并简化为(由 user694733 提供):

++i; ++j; ++k;
m = i && j || k;

关于c - 为什么变量没有增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54672173/

相关文章:

java - 双数组到 boolean 数组,在 java 中进行逻辑运算

比较 C 中的两个 GUID

c - 我如何模拟缺少文件描述符?

c - 使用 C 库导入 Swift 模块

java - 为什么 & 0xff 应用于字节变量

arrays - 查找最大编号的行如果使用逻辑或方法对每一行进行排序,则为 1 秒

php - 不寻常的三元运算

c - C 中的宏定义错误?

c - bind() 抛出错误 EINVAL,Linux 上的 UDP 服务器

C 编译器优化器能否违反逻辑与表达式中操作数的短路和重新排序内存访问?