Szybki znak liczby całkowitej w C

W C jest funkcja znaku:

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

Niestety koszt porównania jest bardzo wysoki, więc muszę zmodyfikować funkcję, aby zmniejszyć liczbę porównań.

Próbowałem:

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

    if (x > 0) return 1;

    return result;
}

W tym przypadku otrzymuję tylko jedno porównanie.

Czy jest jakiś sposób na uniknięcie porównań?

EDYTOWAĆ możliwy duplikat nie daje odpowiedzi na pytanie, ponieważ wszystkie odpowiedzi to C ++, używają porównania (które powinienem unikać) lub nie zwracają-1, +1, 0.

questionAnswers(5)

yourAnswerToTheQuestion