#include <stdio.h>
int main()
{
int a = -2; // 0xFFFFFFFE
unsigned int b = 1; // 0x00000001
if ((int)a > (int)b) printf("(int)a > (int)b;\n");
else printf("(int)a < (int)b;\n");
if ((unsigned int)a > (unsigned int)b) printf("(unsigned int)a > (unsigned int)b;\n");
else printf("(unsigned int)a < (unsigned int)b;\n");
if (a > b) printf("a > b;\n");
else printf("a < b;\n");
char c = -2; // 0xFE
unsigned char d = 1; // 0x01
if ((char)c > (char)b) printf("(char)c > (char)d;\n");
else printf("(char)c < (char)d;\n");
if ((unsigned char)c > (unsigned char)d) printf("(unsigned char)c > (unsigned char)d;\n");
else printf("(unsigned char)c < (unsigned char)d;\n");
if (c > d) printf("c > d;\n");
else printf("c < d;\n");
return 0;
}
run result is:
(int)a < (int)b;
(unsigned int)a > (unsigned int)b;
a > b;
(char)c < (char)d;
(unsigned char)c > (unsigned char)d;
c < d;
Why a>b and c<d? And what is the default compiler ruler for this? I original think the compiler will convert all number to int type, but this is confused me.