Neden imzasız int daha olumsuz bir int fazladır? | Netgez.com
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

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • DrePwn

    DrePwn

    22 Temmuz 2011
  • Elefant Traks

    Elefant Trak

    5 HAZÄ°RAN 2007