birisi bana nasılC Kapalı dönüşüm mü?
printf("%d", -2<2u?1:-1);
baskılar dışarı açıklayabilir '-1'. Bir çeşit örtülü dönüşüm olduğunu varsayar ama anlayamıyorum. unsigned integer
unsigned integer
birisi bana nasılC Kapalı dönüşüm mü?
printf("%d", -2<2u?1:-1);
baskılar dışarı açıklayabilir '-1'. Bir çeşit örtülü dönüşüm olduğunu varsayar ama anlayamıyorum. unsigned integer
unsigned integer
-2
dönüştürülüyor. Bu kesinlikle 2
'dan daha büyük olan UINT_MAX - 1
'a eşit olacaktır. Bu nedenle, koşul başarısız olur ve -1
yazdırılır.
Yani '-2' ve 'işaretsiz tamsayı' dönüşüyor? – Nebeski
@Nebeski Hayır, -2 ile "unsigned int" dönüşümü, başlıkta belirtildiği gibi örtük bir dönüşümdür. İmzalı ve imzasız bir miktarı doğrudan karşılaştıramazsınız, böylece biri diğerine dönüştürülür. – unwind
@Nebeski "tamsayı promosyonları" ve "olağan aritmetik dönüşümler" konusunu inceleyin. – Lundin
Tüm uyarıları etkinleştir: * "C4308 uyarısı: negatif tümleşik sabit, işaretsiz türüne dönüştürülür" * sorunu açıklar. –
Şimdi bu kodun neden ifşa ettiğini açıklayın (if ((-2 <2u? 1u: -1)> 0) {printf ("- 1> 0"); } 'baskı '-1> 0' :) – Lundin
@Lundin [This] gibi bir şey demek istiyorsun (http://pastebin.com/raw/Ss7pW8hb)? – Michi