In an assignment involving cyclic shift hash codes, the instructions include the following code:

int hashCode(const char* p, int len) 
{ unsigned int h = 0;
  for (int i = 0; i < len; i++)
  { h = (h << 5)|(h >> 27);        
    h += (unsigned int)p[i];      
  }
  return h;
}

What do the >> and << in line 4 mean?