c++ 有人能解释一下为什么这两件事是一回事吗?

ykejflvf  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(137)

这里有两个函数做同样的事情,有人能解释一下吗?

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语句的。

ajsxfq5m

ajsxfq5m1#

可以将变量sw_onesw_twosw_three看作由它们组成的一个3位数的"位"。最低有效位是sw_one,最高有效位是sw_three,它们之间的位是sw_two
此数字可以包含以下二进制值:
| 软件_三|软件_二|软件_one|十进制|
| - ------|- ------|- ------|- ------|
| 无|无|无|无|
| 无|无|1个|1个|
| 无|1个|无|第二章|
| 无|1个|1个|三个|
| 1个|无|无|四个|
| 1个|无|1个|五个|
| 1个|1个|无|六个|
| 1个|1个|1个|七|
此语句中的右侧表达式:

displayBitmap = (sw_three << 2) | (sw_two << 1) | sw_one;

从这三个"位"值构建如上所示的单个3位数。
if语句,例如:

else if(sw_one == 1 && sw_two == 0 && sw_three == 1) {
  displayBitmap = 5;
}

仅测试构建数的每个位值并提供相应的十进制值。
将此if语句与上表中值5的二进制表示形式进行比较:
| 软件_三|软件_二|软件_one|十进制|
| - ------|- ------|- ------|- ------|
| 1个|无|1个|五个|

相关问题