나는 C와 C ++ 구현이 일반적으로 밀접하게 관련되어 있기 때문에이 대답을 남겨두기로 결정했지만 실제로 생각했던 것처럼 C 표준을 따르지 않습니다. 요점은 C ++ 표준이 이와 같은 경우에 어떤 일이 발생하는지 지정하지 않는다는 것입니다. 또한 2로 보완되지 않은 표현은 현실 세계에서 매우 드물고, 존재하는 곳에서도 다른 사람이 쉽게 발견 할 수있는 것으로 드러내 기보다는 많은 경우에 차이를 숨기는 경우가 많습니다.
존재하는 정수 표현에서 음수 0의 동작은 C 표준 에서처럼 C ++ 표준에서 엄격하게 정의되지 않습니다. 그러나 C 표준 (ISO / IEC 9899 : 1999)을 최상위 수준의 표준 참조로 인용합니다 [1.2].
C 표준 [6.2.6.2]에서 음의 0은 비트 연산의 결과이거나 음의 0이 이미 존재하는 연산 (예 : 음의 0을 값으로 곱하거나 나누거나 0)-단항 빼기 연산자를 예에서와 같이 일반 0 값에 적용하면 일반 0이 보장됩니다.
음의 0을 생성 할 수 있는 경우 에도 음의 0을 지원하는 시스템에서도 그럴 것이라는 보장은 없습니다.
이러한 경우가 실제로 음의 0을 생성하는지 일반 0을 생성하는지, 음의 0이 객체에 저장 될 때 일반 0이되는지는 지정되지 않습니다.
따라서 우리는 결론을 내릴 수 있습니다. 아니오,이 경우를 감지 할 수있는 신뢰할 수있는 방법이 없습니다. 2가 아닌 보완 표현이 현대 컴퓨터 시스템에서 매우 드물다는 사실이 아니더라도.
C ++ 표준은 "음의 0"이라는 용어를 언급하지 않으며, 허용되는 [3.9.1 para 7]을 제외하고는 부호있는 크기와 1의 보수 표현에 대한 세부 사항에 대해 거의 논의하지 않습니다.