C中使用逗号的三进制?

问题描述

所以我看到了这段代码

b[2080];
main(j) {
  for (;;) {
    printf("\x1b[H");
    for (j = 1; j < 2080; j++) 
    b[j] = j < 2000 ? (b[j + 79] + b[j + 80] + b[j] + b[j - 1] + b[j + 81]) / 5 : rand() % 4 ? 0 : 512,j < 1840 ? putchar((j % 80) == 79 ? '\n' : " .:*#$H@" [b[j] >> 5]) : 0;
    usleep(20000);
  }
}

所以我试图重写它,为什么还要除以32?
该数组必须声明为全局数组,否则它将无法正常工作。有什么主意吗?
还为什么512? 到目前为止,这是我的尝试,有什么问题吗?

for (int j = 1; j < 2080; j++) 
            {
                if (j < 2000) {
                    b[j] = (b[j + 79] + b[j + 80] + b[j] + b[j - 1] + b[j + 81]) / 5;
                }
                else if (rand() % 4 != 0) { // Generate random integers in range 0 to 4
                          b[j] = 0;
                     }
                     else
                     {
                         b[j] = 512;
                     }
                   
                }
            }

解决方法

以下是功能等效的代码,其中三元运算符转换为if/else语句:

            if (j < 2000) {
                b[j] = (b[j + 79] + b[j + 80] + b[j] + b[j - 1] + b[j + 81]) / 5;
            } else if (rand() % 4) {
                b[j] = 0;
            } else {
                b[j] = 512;
            }
            if (j < 1840) {
                if ((j % 80) == 79) {
                    putchar('\n');
                } else {
                    putchar(" .:*#$H@"[b[j] / 32]);
                }
            }

关于右移>> 5的作用问题,它除以32(2 5 ),然后用该除法值索引数组" .:*#$H@"

编辑:至于为什么数组是全局数组,可能只是在没有额外代码的情况下将其初始化为零(整个过程似乎写得尽可能短,例如,使用隐式{ {1}}类型和自变量中的int

请注意,(原始)代码中存在访问范围错误:jb[j + 81]时可以访问j(因为1999) ,但< 20001999 + 81 == 2080超出范围。您可以将数组替换为本地b[2080],但在修复错误时会稍微改变输出。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...