Si sizeof(int) == sizeof(long) , entonces INT_MIN == LONG_MIN && INT_MAX == LONG_MAX siempre es cierto?
¿Existen casos reales que demuestren que "no es cierto"?
UPD. La pregunta similar: ¿Hay alguna implementación de C alojada que tenga CHAR_BIT > 8? .
No tiene por qué ser cierto. C11 6.2.6.2p2 :
Para los tipos enteros con signo, los bits de la representación del objeto se dividirán en tres grupos: bits de valor, bits de relleno y el bit de signo. No es necesario que haya partes de relleno; El carácter firmado no tendrá bits de relleno. Habrá exactamente un bit de signo. Cada bit que sea un bit de valor tendrá el mismo valor que el mismo bit en la representación de objeto del tipo sin signo correspondiente (si hay M bits de valor en el tipo con signo y N en el tipo sin signo, entonces M <= N ). Si el bit de signo es cero, no afectará el valor resultante. Si el bit de signo es uno, el valor se modificará de una de las siguientes maneras:
- se niega el valor correspondiente con el bit de signo 0 (signo y magnitud);
- el bit de signo tiene el valor -(2 M ) (complemento a dos);
- el bit de signo tiene el valor -(2 M - 1) (complemento de unos).
Cuál de estos se aplica está definido por la implementación, al igual que si el valor con el bit de signo 1 y todos los bits de valor cero (para los dos primeros), o con el bit de signo y todos los bits de valor 1 (para el complemento de unos), es una representación trampa. o un valor normal. En el caso de signo y magnitud y complemento de unos, si esta representación es un valor normal se denomina cero negativo.
Ahora, la pregunta es "¿hay alguna implementación que tenga una cantidad diferente de bits de relleno" o, incluso como se mencionó claramente , diferentes representaciones para diferentes tipos de enteros; es muy difícil probar que no existe tal implementación actualmente en uso. Pero creo que es muy poco probable que uno se encuentre con un sistema como este en la vida real.