c - if (y & (y = 2) 那么如何处理这个if条件

标签 c if-statement bit-manipulation bitwise-operators

#include <stdio.h>

int main() {
    int y = 1;
    if (y & (y = 2))
        printf("true %d\n",y);
    else
        printf("false %d\n",y);
    return 0;
}

输出是如何出现的 true 2 ?据我里面的if这种情况会发生if( 1 & (2))但输出为 true 2 .

最佳答案

在表达式 y&(y=2) 中,您同时读取和写入 y,两者之间没有序列点。这样做会调用 undefined behavior 。这意味着无法准确预测程序的行为,因此没有答案是“正确的”。

关于c - if (y & (y = 2) 那么如何处理这个if条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096796/

相关文章:

arrays - 我们如何在Rust中操纵u8数组的第一位? [复制]

c++ - 负数的按位运算会导致ub吗?

使用然后删除 typedef 语句后 C 链表不再工作

c++ - 扑克代码清理修改从书...不太正确

java - 我的 Java 代码遇到一些问题。在循环中区分正数和负数时不会运行

if-statement - Svelte 中是否有更好的方法来包含条件 HTML 元素

r - 如何从 R 中的 (9) 个重复值创建新变量?我需要循环吗?

c - 这有可能使用某种位魔术来实现吗?

c++ - 你能定义 main() 来接收比 argc/argv 参数更多的参数吗?

c - 有没有一种简单的方法可以在 ANSI C 中编写适合 11"MacBook Air 屏幕的策略(或其他)设计模式?