SORU
28 Kasım 2012, ÇARŞAMBA


Neden imzasız int daha olumsuz bir int fazladır?

int main(void) 
{ 
     unsigned int y = 10; 
     int x = – 4; 
     if (x > y) 
        Printf("x is greater");
     else 
        Printf("y is greater"); 
     getch(); 
     return (0); 
} 

Output: x is greater

Çıkış imzasız olduğundan daha y olacağını düşündüm. Bunun arkasındaki neden nedir?

CEVAP
28 Kasım 2012, ÇARŞAMBA


int değeri unsigned int bir terfi çünkü. özellikle unsigned int 4294967292, 10 göre çok daha büyük olan 32-bit bir makinede 0xFFFFFFFC,

C99 6.3.1.1-p2

Eğer bir int temsil eder tüm değerler orijinal tip olarak sınırlı genişliği, biraz saha), değeri dönüştürülür int; aksi halde, dönüştürülürimzalanmamış int. Bu tamsayı promosyon olarak adlandırılır. Tüm diğer türleri tamsayı promosyonlar tarafından değiştirilmemiştir.

Dönüştürme işlemini yapmak için:

C99 6.3.1.3-p2

Aksi durumda, eğer yeni tip imzasız, değer dönüştürülmüş tarafından sürekli ekleme çıkarma bir daha maksimum değeri temsil edilebilir yeni tip kadar değer aralığında yeni tip.

Temelde anlamına gelen "UİNT_MAX ekleme 1" (bunu okurken zaten).

Promosyon unsigned int yan; öncelik sırasına neden ile ilgili:

C99 6.3.1.8-p1

...Aksi halde, işlenen bu işaretsiz tamsayı türü vardır rütbe daha büyük veya eşit değerde türünün diğer işlenen, sonra da işlenen ile işaretli tamsayı türüne dönüştürülür türden işlenen imzalanmamış bir tamsayı yazın.

Aksi halde, eğer bu tür işlenen imzalı tamsayı türü olabilir temsil eden tüm değerleri türü işlenen imzalanmamış bir tamsayı girin, ardından işlenen imzalanmamış bir tamsayı türü dönüştürülür türden işlenen imzalı bir tamsayı yazın.

Beni unsigned char vs int söyler beklendiği gibi çalışması gerekir.

Test

int main()
{
    int x = -4;
    unsigned int y = 10;
    unsigned char z = 10;

    if (x > y)
        printf("x>y\n");
    else
        printf("x<y\n");

    if (x > z)
        printf("x>z\n");
    else
        printf("x<z\n");
    return 0;
}

Çıktı

x>y
x<z

Baksana.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • TechSmartt

    TechSmartt

    29 Aralık 2010
  • thewinekone

    thewinekone

    17 Aralık 2005