You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中someElements |= array[i] == 'y'语句工作原理解析

关于someElements |= array[i] == 'y'语句的生效原理

这段程序会在数组部分元素为'y'或全部元素为'n'时显示对应消息。我的问题是关于这行代码:someElements |= array[i] == 'y',我知道它可以写成someElements = someElements | array[i] == 'y',想请教为什么这个语句能够生效?

#include <stdio.h>

int main()
{
    
    char array[3] = { 0 };

    int i;
    for (i = 0; i < 3; i++) {
        do {
        printf("\nElement No.%d [y/n]: ", i + 1);
        scanf(" %c", &array[i]);
            if (array[i] != 'y' && array[i] != 'n') {
            printf("Must be a lowercase 'y' or 'n'\n");
            } 
        } while (array[i] != 'y' && array[i] != 'n');
    }

    int someElements = 0;
    
    for (i = 0; i < 3; i++) {
        someElements |= array[i] == 'y';
    }
    if (someElements) {
        printf("\nSOME of the elements = y.\n");
    }
    else{
         printf("\nNONE of the elements = y.\n");
    }

    return 0;
}

为什么这行代码能生效?

拆解来看,核心是三个关键点:

  1. C语言中关系表达式的整数结果
    在C里,array[i] == 'y'这类关系判断的结果是整数:条件成立(元素为'y')时返回1,不成立则返回0。

  2. 按位或赋值运算符|=的逻辑
    someElements |= x等价于someElements = someElements | x,按位或的规则是:只要两个操作数的对应二进制位有一个是1,结果的该位就是1。
    这里someElements初始值为0,每次循环和array[i] == 'y'的结果(0或1)做按位或:

  • 若数组里至少有一个元素是'y',某次循环会得到1,此时0 | 1 = 1;后续不管循环得到0还是1,1 | 0或1 | 1的结果都是1,someElements会一直保持非0状态。
  • 若数组所有元素都是'n',每次循环得到的都是0,0 | 0始终是0,someElements保持为0。
  1. 条件判断的整数规则
    C语言中,非0整数在if条件里会被视为“真”,0则被视为“假”。所以后续的if (someElements)判断:
  • 当someElements为1(存在'y'元素)时,条件成立,输出对应提示;
  • 当someElements为0(全是'n')时,进入else分支,输出另一条提示。

另外补充:运算符优先级在这里起到了关键作用,==的优先级高于|,所以会先计算array[i] == 'y'得到0或1,再和someElements做按位或,无需加括号也能保证逻辑正确。

内容的提问来源于stack exchange,提问作者SSY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:20:52