Tip dönüştürme - imzasız imzalı int/char
Bu aşağıdaki program çalıştırmak için çalıştı:
#include <stdio.h>
int main() {
signed char a = -5;
unsigned char b = -5;
int c = -5;
unsigned int d = -5;
if (a == b)
printf("\r\n char is SAME!!!");
else
printf("\r\n char is DIFF!!!");
if (c == d)
printf("\r\n int is SAME!!!");
else
printf("\r\n int is DIFF!!!");
return 0;
}
Bu program için çıktı alıyorum:
char DİFF!!! int!!!
Neden her ikisi için farklı çıktılar alıyoruz?
Çıktı aşağıdaki gibi olmalıdır ?
char!!! int!!!
15**.
CEVAP
Bu bir C programcısı bilmeniz gereken iki taneler C. çeşitli örtülü tür dönüştürme kuralları yüzündenthe usual arithmetic conversionsvetamsayı promosyonlar(ikincisi eski parçası).
Char bu durumda 4* *türleri var. Bu ikisi deküçük tamsayı türleri. Başka böyle küçük tamsayı türleri bool short.promosyon kuralları tamsayıküçük bir tamsayı türü bir operasyon işlenen her türünü imzalandı int, terfi alacak devlet. Bu tip imzalanmış veya imzalanmamış olsaydı her koşulda olacak.
Bu durumda signed char işareti korunur ve int değeri içeren bir -5 terfi olacak. unsigned char Bu durumda 251 olan bir değer (0xFB ) içerir. int aynı değeri içeren bir terfi olacak. Size sonuna kadar
if( (int)-5 == (int)251 )
Tamsayı dava türleri 13 ** var. Tamsayı promosyonlar geçerli değildir bu yüzden küçük tamsayı türleri vardır. Bunun yerine, dengeliher zamanki aritmetik dönüşümlereğer iki işlenen varsa aynı "" (boyut) ama farklı, imzalı imzasız işlenen aynı tür dönüştürülür signedness. rütbe durumu , Size sonuna kadar
if( (unsigned int)-5 == (unsigned int)-5)

Char imzalı veya imzasız varsayılan ol...
C çeteleler imzalı ya da imzasız....
C imzalı imzasız dönüşüm - her zaman g...
İmzalı/imzasız karşılaştırma...
jnı jstring *char dönüştürme...