J'ai décidé de laisser cette réponse car les implémentations C et C ++ sont généralement étroitement liées, mais en fait, cela ne se réfère pas au standard C comme je le pensais. Le fait est que la norme C ++ ne spécifie pas ce qui se passe pour de tels cas. Il est également pertinent que les représentations non complémentaires à deux soient extrêmement rares dans le monde réel et que même là où elles existent, elles cachent souvent la différence dans de nombreux cas plutôt que de l'exposer comme quelque chose que quelqu'un pourrait facilement s'attendre à découvrir.
Le comportement des zéros négatifs dans les représentations entières dans lesquelles ils existent n'est pas aussi rigoureusement défini dans le standard C ++ que dans le standard C. Il cite cependant la norme C (ISO / CEI 9899: 1999) comme référence normative au plus haut niveau [1.2].
Dans la norme C [6.2.6.2], un zéro négatif ne peut être que le résultat d'opérations au niveau du bit, ou d'opérations où un zéro négatif est déjà présent (par exemple, multiplier ou diviser un zéro négatif par une valeur, ou ajouter un zéro négatif à zéro) - l'application de l'opérateur unaire moins à une valeur d'un zéro normal, comme dans votre exemple, est donc garantie pour aboutir à un zéro normal.
Même dans les cas qui peuvent générer un zéro négatif, il n'y a aucune garantie qu'ils le feront, même sur un système qui prend en charge le zéro négatif:
Il n'est pas précisé si ces cas génèrent réellement un zéro négatif ou un zéro normal, et si un zéro négatif devient un zéro normal lorsqu'il est stocké dans un objet.
Par conséquent, nous pouvons conclure: non, il n'existe aucun moyen fiable de détecter ce cas. Même si ce n'est pas pour le fait que les représentations à complément non double sont très rares dans les systèmes informatiques modernes.
Le standard C ++, pour sa part, ne fait aucune mention du terme «zéro négatif», et a très peu de discussion sur les détails de la grandeur signée et des représentations complémentaires de chacun, sauf pour noter [3.9.1 para 7] qu'ils sont autorisés.