Como C trata o número 0 na arquitetura de complemento de alguém?

Estive estudando recentemente o sistema de complemento de representação de números e, pelo que entendi, existem duas variantes do número 0. Há um zero negativo (-0) e um zero positivo (+0).

Minha pergunta é, na arquitetura de complemento de alguém, como exatamente essa anomalia é tratada em C? C faz uma distinção entre -0 e +0 ou essas duas formas são simplesmente tratadas como zero.

Se for o caso que +0 e -0 retornem VERDADEIRO quando testados para zero, pergunto-me como funcionaria o código de exemplo a seguir que calcula o número de bits definidos em um número inteiro se inserirmos -0 como entrada.

int bitcount(int x)
{
    int b;
    for (b = 0; x != 0; b++)
        x &= (x-1);
    return b;
}

Como -0, em um complemento, tem todos os seus bits definidos como 1, -0 deve retornar a maior quantidade de bits definida em qualquer outro número; no entanto, parece que esse código falharia na condição de teste de loop dex != 0, e nem entraria no loop, fornecendo um resultado incorreto.

Seria possível, de alguma forma, em C, na arquitetura de complemento de alguém, tornar a condição do loop sensível a zeros positivos como em:x != +0 Além disso, se eu subtraísse 1 de +0, obteria -0 ou -1. Em outras palavras, +0 - 1 = -0 na arquitetura de complemento de alguém?

Em suma, para não sair muito do rumo nesta discussão, estou apenas me perguntando como C trata as peculiaridades do número 0 na arquitetura de complemento de alguém.

questionAnswers(2)

yourAnswerToTheQuestion