İşaretli ile işaretsiz karşılaştırılırken, derleyici işaretli değeri işaretsiz olarak dönüştürür. Eşitlik için bu önemli değil -1 == (unsigned) -1
. Bu konularda diğer karşılaştırmalar için aşağıdakileri örneğin doğrudur: -1 > 2U
.
DÜZENLEME: Referanslar:
5/9: (İfadeler)
Aritmetik veya numaralandırma türünde işlenenler bekleyen birçok ikili işleç, dönüşümlere neden olur ve sonuç türlerini benzer şekilde verir. Amaç, aynı zamanda sonucun türü olan ortak bir tür elde etmektir. Bu model, aşağıdaki gibi tanımlanan normal aritmetik dönüşümler olarak adlandırılır:
İşlenenlerden biri long double türündeyse, diğeri long double türüne dönüştürülür.
Aksi takdirde, işlenenlerden biri double ise diğeri double'a dönüştürülür.
Aksi takdirde, işlenenlerden biri float ise diğeri float'a dönüştürülür.
Aksi takdirde, integral yükseltmeler (4.5) her iki işlenen üzerinde gerçekleştirilecektir. 54)
Daha sonra, işlenenlerden biri uzun süre işaretsiz ise, diğeri işaretsiz uzunluğa dönüştürülür.
Aksi takdirde, bir işlenen bir uzun int ve diğer işaretsiz int ise, o zaman bir uzun int, işaretsiz bir int'in tüm değerlerini temsil edebiliyorsa, işaretsiz int, bir long int'e dönüştürülür; aksi takdirde her iki işlenen de unsigned long int türüne dönüştürülür.
Aksi takdirde, işlenenlerden biri uzunsa, diğeri uzuna dönüştürülür.
Aksi takdirde, işlenenlerden biri işaretsiz ise, diğeri işaretsiz hale getirilecektir.
4.7 / 2: (İntegral dönüşümler)
Hedef tipi işaretsiz ise, sonuçta elde edilen değer kaynak tamsayı ile uyumlu en az işaretsiz tamsayıdır (modulo 2 n, burada n işaretsiz tipi temsil etmek için kullanılan bit sayısıdır). [Not: Bir ikinin tümleyen gösteriminde, bu dönüşüm kavramsaldır ve bit modelinde herhangi bir değişiklik olmaz (eğer kesilme yoksa). ]
EDIT2: MSVC uyarı seviyeleri
MSVC'nin farklı uyarı seviyelerinde uyarılan, elbette geliştiriciler tarafından yapılan seçimlerdir. Gördüğüm kadarıyla, imzalı / işaretsiz eşitliğe karşı büyük / az karşılaştırmalarıyla ilgili seçimleri anlamlı, bu elbette tamamen özneldir:
-1 == -1
aynı anlama gelir -1 == (unsigned) -1
- bunu sezgisel bir sonuç buluyorum.
-1 < 2
gelmez aynı anlama -1 < (unsigned) 2
Bu ilk bakışta az sezgisel ve IMO bir "erken" uyarısı hak -.