plum600 发表于 2016-5-20 11:55:42

哪位能帮我仔细解释下红色代码的意思吗?

/////////////////////////////////////////////////////////////
int getIRKey() {
int data;
int i;
while(pulseIn(irPin, HIGH) < start_bit); //Wait for a start bit

for(i = 0 ; i < BIT_PER_BLOCK ; i++)
    data = pulseIn(irPin, HIGH); //Start measuring bits, I only want HIGH pulses

delay(100);
for(i = 0 ; i < BIT_PER_BLOCK ; i++) //Parse them
{   
    if(data > bin_1) //is it a 1?
      data = 1;
    else
    if(data > bin_0) //is it a 0?
      data = 0;
    else
      return -1; //Flag the data as invalid; Return -1 on invalid data
}
//based on NEC protocol, command data started from bit 16
//and end with bit 24 (8 bits long)
int result = 0;
for(i = 16 ; i < 24; i++) {
    DigiKeyboard.print(data); //print out the value of button in binary form
    if(data == 1) result |= (1<<i-16);
}
return result; //Return key number
}

plum600 发表于 2016-5-20 21:36:03

1<<i-16   这个是吧字符型转成int型吗?

bacon6581 发表于 2016-5-21 10:06:58

左移运算的两个操作数应为整数类型。第一个操作数是要进行移位操作的数,第二个操作数指定第一个操作数移动的位数。如果第二个操作数等于0则不发生任何移位。
应用举例:
一,问:计算表达式14 << 2的值。
答:表达式14 << 2的值为56,因为14(即二进制的00001110)向左移两位等于56(即二进制的00111000)。
二,问: 计算表达式8 >> 2的值。
答:表达式8 >> 2的值为2,因为8(即二进制的00001000)向右移两位等于2(即二进制的00000010)。
页: [1]
查看完整版本: 哪位能帮我仔细解释下红色代码的意思吗?