“&”运算后存储的值是多少

时间:2019-03-17 04:36:16

标签: c microcontroller i2c keil

在下面的代码中

void I2C_Write(uint8_t v_i2cData_u8)
{
    uint8_t i;

    for(i=0;i<8;i++)                   // loop 8 times to send 1-byte of data
    {
        SDA_PIN = v_i2cData_u8 & 0x80;     // Send Bit by Bit on SDA line
        i2c_Clock();                   // Generate Clock at SCL
        v_i2cData_u8 = v_i2cData_u8<<1;// Bring the next bit to be transmitted to MSB position
    }

    i2c_Clock();
}

在语句中:SDA_PIN = v_i2cData_u8&0x80;告知数据将被逐位发送,如果数据被逐位发送,那么将存储在SDA_PIN中,SDA_PIN的值为0x80还是1?

2 个答案:

答案 0 :(得分:0)

根据该循环中0x80的高阶位,将为

SDA_PIN分配0(128)或v_i2cData_u8。如果要确保写入0x01字节,则需要执行以下操作:

SDA_PIN = (v_i2cData_u8 & 0x80) ? 1 : 0;

答案 1 :(得分:0)

当v_i2cData_u8的第7位为1时,SDA_PIN为0x80,否则为0。

如果您希望将其设置为1而不是0x80,则可以这样做

SDA_PIN = !!(v_i2cData_u8 & 0x80); or
SDA_PIN = (v_i2cData_u8 & 0x80) >> 7;

或如塞尔比所说。