这里有两个函数做同样的事情,有人能解释一下吗?
void calculateFace(){
//READ THE DIP SWITCH
int sw_one = digitalRead(LandingStartSW);
int sw_two = digitalRead(LandingApproachSW);
int sw_three = digitalRead(LandingTerminalSW);
displayBitmap = (sw_three << 2) | (sw_two << 1) | sw_one;
}
以及
void calculateFace(){
READ THE DIP SWITCH
int sw_one = digitalRead(LandingStartSW);
int sw_two = digitalRead(LandingApproachSW);
int sw_three = digitalRead(LandingTerminalSW);
if(sw_one == 1 && sw_two == 0 && sw_three == 0) {
displayBitmap = 1;
}
else if(sw_one == 0 && sw_two == 1 && sw_three == 0) {
displayBitmap = 2;
}
else if(sw_one == 1 && sw_two == 1 && sw_three == 0) {
displayBitmap = 3;
}
else if(sw_one == 0 && sw_two == 0 && sw_three == 1) {
displayBitmap = 4;
}
else if(sw_one == 1 && sw_two == 0 && sw_three == 1) {
displayBitmap = 5;
}
else if(sw_one == 0 && sw_two == 1 && sw_three == 1) {
displayBitmap = 6;
}
else if(sw_one == 1 && sw_two == 1 && sw_three == 1) {
displayBitmap = 7;
}
else {
displayBitmap = 0;
}
我自己也试着去理解它,我知道第一个是对值进行位移位,但我不知道它是如何转换成if else语句的。
1条答案
按热度按时间ajsxfq5m1#
可以将变量
sw_one
、sw_two
和sw_three
看作由它们组成的一个3位数的"位"。最低有效位是sw_one
,最高有效位是sw_three
,它们之间的位是sw_two
。此数字可以包含以下二进制值:
| 软件_三|软件_二|软件_one|十进制|
| - ------|- ------|- ------|- ------|
| 无|无|无|无|
| 无|无|1个|1个|
| 无|1个|无|第二章|
| 无|1个|1个|三个|
| 1个|无|无|四个|
| 1个|无|1个|五个|
| 1个|1个|无|六个|
| 1个|1个|1个|七|
此语句中的右侧表达式:
从这三个"位"值构建如上所示的单个3位数。
if
语句,例如:仅测试构建数的每个位值并提供相应的十进制值。
将此
if
语句与上表中值5的二进制表示形式进行比较:| 软件_三|软件_二|软件_one|十进制|
| - ------|- ------|- ------|- ------|
| 1个|无|1个|五个|