一.问题描述
在我判断Oled的某点的值是否为1时,用到了如下判断语句
if(oled[x][y/8] &=1<<(y%8)
但是,当我将其改为如下的判断语句,代码却跑出BUG了
if((oled[x][y/8]&=1<<(y%8))==1)
二.原因分析
1.if语句理解错误
首选让我们看看下面的代码运行结果
#include <stdio.h>
int main(){
int a=-1;
if(a) printf("此判断为真");
else
printf("此判断为假");
}
运行结果如下,实际上只要if
判断语句中的值不为零
,判断即为真
2.位运算不了解
首先我们回到开头,为什么将if
判断语句改为是否与1
相等就错了呢?在&
运算中,是将值的目标位
进行判断是否为1
,如果该位为1
则取1
,否则取0
.因为我知道目标位
不相等直接取零
,所以我自然而然的认为相等则取1
,则是错误的,即使相等也不为1
.
三.体会总结
首先,开头的代码完整写法应为:
if((oled[x][y/8] &=1<<(y%8)!=0)
在使用if
判断语句时,看括号内是否省略了!=0
后缀,如果少了则要提醒自己一下有这个后缀.因为它并不是代表值为1
时为真