该程序声明一个8x8字符数组,然后使用循环将以下数据存储到数组中(每个数组元素一个字符).然后它将此数组打印到屏幕:
BRBRBRBR
RBRBRBRB
BRBRBRBR
RBRBRBRB
BRBRBRBR
RBRBRBRB
BRBRBRBR
RBRBRBRB
该程序工作正常.但是,我无法理解if语句背后的逻辑:
if((i+j) & 1)
Run Code Online (Sandbox Code Playgroud)
我不明白如果添加i + j'和'1是真的设置数组到'R',否则将其设置为'B'.这可能有一个相当明显的答案,但我是C的新手.有人可以帮助澄清为什么这个程序适用于这个逻辑?谢谢!
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, j;
char letter[8][8];
for(i=0; i<8; i++) {
for(j=0; j<8; j++) {
//This if-statement
if ((i+j) & 1)
letter[i][j] = 'R';
else
letter[i][j] = 'B';
printf("%c" , letter[i][j]);
}
printf("\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(i+j) & 1将评估true什么时候i+j是奇数,false什么时候i+j是偶数.
该&表达式中的是按位AND运算符,而不是逻辑AND运算符.
如果编写如下代码,代码将更具可读性:
int is_odd(int n)
{
return ((n&1) == 1);
}
...
if ( is_odd(i+j) )
Run Code Online (Sandbox Code Playgroud)