C ve C ++ uygulamaları genellikle yakından ilişkili olduğu için bu yanıtı bırakmaya karar verdim, ancak aslında düşündüğüm gibi C standardına ertelemiyor. Önemli olan nokta, C ++ standardının bu gibi durumlar için ne olacağını belirtmemesidir. Aynı zamanda, iki-tamamlayıcı olmayan temsillerin gerçek dünyada son derece nadir olması ve var oldukları yerde bile, çoğu durumda, birisinin kolayca keşfetmeyi bekleyebileceği bir şey olarak ortaya çıkarmak yerine, çoğu durumda farkı gizledikleri de önemlidir.
Negatif sıfırların içinde bulundukları tamsayı temsillerindeki davranışı, C ++ standardında C standardında olduğu kadar titiz bir şekilde tanımlanmamıştır. Bununla birlikte, C standardını (ISO / IEC 9899: 1999) en üst düzeyde [1.2] normatif bir referans olarak göstermektedir.
C standardında [6.2.6.2], negatif sıfır yalnızca bitsel işlemlerin veya negatif sıfırın zaten mevcut olduğu işlemlerin sonucu olabilir (örneğin, negatif sıfırın bir değerle çarpılması veya bölünmesi veya eksi sıfırın eklenmesi sıfır) - tekli eksi operatörünü, örneğinizde olduğu gibi normal bir sıfır değerine uygulamak, bu nedenle normal bir sıfırla sonuçlanacağı garanti edilir.
Hatta durumlarda olabilir bir negatif sıfır oluşturmak, hatta destek negatif sıfır yapan bir sistem üzerinde, hiçbir garantisi durumun böyle olacağını vardır:
Bu durumların gerçekte bir negatif sıfır mı yoksa normal bir sıfır mı oluşturduğu ve bir nesnede depolandığında negatif sıfırın normal sıfır olup olmadığı belirtilmemiştir.
Bu nedenle şu sonuca varabiliriz: hayır, bu vakayı tespit etmenin güvenilir bir yolu yok. Modern bilgisayar sistemlerinde iki tamamlayıcı olmayan temsillerin çok nadir olduğu gerçeği olmasa bile.
C ++ standardı, kendi adına, "negatif sıfır" teriminden hiç bahsetmez ve işaretli büyüklük ve kişinin tamamlayıcı temsillerinin ayrıntılarına ilişkin çok az tartışmaya sahiptir, bunlara izin verildiği not [3.9.1 para 7] dışında.