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
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.
Neden sıralanmamış bir dizi daha hızlı...
Neden baskı "B" baskı " ...
Neden bir döngü iki döngü daha yavaş g...
Neden Standart girdiden okuma satır Py...
Neden Python kodunu daha hızlı bir işl...