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

C语言中1与0是否恒为真假值?康威生命游戏代码疑问

关于康威生命游戏C代码的疑问解答

针对你提出的三个问题,结合代码逐一解释:

1. C语言中1和0是否一定代表真(true)和假(false)?

在C语言的逻辑规则里:

  • 任何非零值都会被判定为“真”,并非只有1;只有0会被判定为“假”。
  • 但当布尔表达式(比如a == b)的结果作为数值输出时,C99及以后的标准规定它的结果是1(真)或0(假)。早期C89没有原生布尔类型,程序员就普遍用1和0来模拟真假值。

2. 代码中用1表示真、0表示假的理解是否正确?

你的理解完全正确。代码里的三元运算符curMap[i+1][j+1] == '*' ? 1 : 0,就是把“当前位置是存活细胞(*)”这个判断结果,转换成1(真,代表存在一个邻居)或0(假,代表无邻居),进而累加统计总邻居数。这种写法是C语言里统计条件成立次数的常用手段,本质就是用1代表条件为真的情况,0代表假,逻辑完全通顺。

3. 代码为何没有使用bool类型?

主要有三个原因:

  • 兼容性需求:这段代码大概率是基于C89标准编写的,而C89没有原生的bool类型——_Bool是C99才引入的,bool作为别名还需要包含<stdbool.h>头文件。用1和0不需要依赖任何头文件,能兼容更老的编译环境。
  • 场景匹配性:代码用char类型的*和空格直接存储细胞的存活/死亡状态,字符操作比布尔值更直观,没必要额外转换类型。而统计邻居数量时需要整数计数,用1和0累加比布尔值转整数更直接高效。
  • 代码简洁性:用1和0模拟真假已经足够满足这里的逻辑需求,引入布尔类型反而会增加不必要的复杂度。

附上你提供的代码:

void iterGen(int WIDTH, int HEIGHT, char curMap[WIDTH][HEIGHT])
{
    int i, j;
    char tempMap[WIDTH][HEIGHT];

    for (i = 0; i < WIDTH; i++)
    {
        for (j = 0; j < HEIGHT; j++)
        {
            int neighbors = 0;
            neighbors += curMap[i+1][j+1] == '*' ? 1 : 0;
            neighbors += curMap[i+1][j] == '*' ? 1 : 0;
            neighbors += curMap[i+1][j-1] == '*' ? 1 : 0;
            neighbors += curMap[i][j+1] == '*' ? 1 : 0;
            neighbors += curMap[i][j-1] == '*' ? 1 : 0;
            neighbors += curMap[i-1][j+1] == '*' ? 1 : 0;
            neighbors += curMap[i-1][j] == '*' ? 1 : 0;
            neighbors += curMap[i-1][j-1] == '*' ? 1 : 0;

            if (curMap[i][j] == ' ')
            {
                tempMap[i][j] = neighbors == 3 ? '*' : ' ';
            }
            else if (curMap[i][j] == '*')
            {
                tempMap[i][j] = neighbors < 2 || neighbors > 3 ? ' ' : '*';
            }
        }
    }

    for (i = 0; i < WIDTH; i++)
    {
        for (j = 0; j < HEIGHT; j++)
        {
            curMap[i][j] = tempMap[i][j];
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:51:09