SORU
26 HAZİRAN 2013, ÇARŞAMBA


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
26 HAZİRAN 2013, ÇARŞAMBA


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)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kalabrandmusic

    kalabrandmus

    25 Kasım 2009
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007
  • MndsgnVEVO

    MndsgnVEVO

    26 Kasım 2013