我在网上遇到了一些代码,其中为arduino实现了PID . 我对实施感到困惑 . 我对PID如何工作有基本的了解,但是我的混淆源是为什么十六进制用于m_prevError? 0x80000000L表示的值是什么,为什么在计算速度时右移10?

// ServoLoop Constructor
ServoLoop::ServoLoop(int32_t proportionalGain, int32_t derivativeGain)
{
    m_pos = RCS_CENTER_POS;
    m_proportionalGain = proportionalGain;
    m_derivativeGain = derivativeGain;
    m_prevError = 0x80000000L;
}

// ServoLoop Update 
// Calculates new output based on the measured
// error and the current state.
void ServoLoop::update(int32_t error)
{
    long int velocity;
    char buf[32];
    if (m_prevError!=0x80000000)
    {   
        velocity = (error*m_proportionalGain + (error - m_prevError)*m_derivativeGain)>>10;

        m_pos += velocity;
        if (m_pos>RCS_MAX_POS) 
        {
            m_pos = RCS_MAX_POS; 
        }
        else if (m_pos<RCS_MIN_POS) 
        {
            m_pos = RCS_MIN_POS;
        }
    }
    m_prevError = error;
}