C中带逗号的多个三元?
Multiple Ternary in C with comma?
所以我看到了这段代码
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(25),然后索引数组" .:*#$H@"
与该分割值。
edit:至于为什么数组是全局的,可能只是为了让它初始化为零,而不需要额外的代码(整个东西似乎写得尽可能短,例如,使用参数中的隐式 int
类型和 j
)。
请注意,(原始)代码中存在访问越界错误:当 j
为 1999
时可以访问 b[j + 81]
(因为那是 < 2000
),但 1999 + 81 == 2080
和 b[2080]
超出范围。您可以用本地 int b[2081] = { 0 };
替换数组,但在修复错误时它会稍微改变输出。
所以我看到了这段代码
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(25),然后索引数组" .:*#$H@"
与该分割值。
edit:至于为什么数组是全局的,可能只是为了让它初始化为零,而不需要额外的代码(整个东西似乎写得尽可能短,例如,使用参数中的隐式 int
类型和 j
)。
请注意,(原始)代码中存在访问越界错误:当 j
为 1999
时可以访问 b[j + 81]
(因为那是 < 2000
),但 1999 + 81 == 2080
和 b[2080]
超出范围。您可以用本地 int b[2081] = { 0 };
替换数组,但在修复错误时它会稍微改变输出。