Signo rápido de entero en C

Hay una función de signo en C:

int sign(int x)
{
    if(x > 0) return 1;
    if(x < 0) return -1;
    return 0;
}

Desafortunadamente, el costo de comparación es muy alto, por lo que necesito modificar la función para reducir el número de comparaciones.

Intenté lo siguiente:

int sign(int x)
{
    int result;
    result = (-1)*(((unsigned int)x)>>31);

    if (x > 0) return 1;

    return result;
}

En este caso solo tengo una comparación.

¿Hay alguna manera de evitar las comparaciones en absoluto?

EDITAR posible duplicado no da una respuesta para una pregunta ya que todas las respuestas son C ++, utiliza la comparación (que se supone que debo evitar) o no devuelve-1, +1, 0.

Respuestas a la pregunta(5)

Su respuesta a la pregunta