Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
236 views
in Technique[技术] by (71.8m points)

c - Comparison between 'int' and 'char'?

The result of the below code is "No" but I am not sure 'Why' ? Searched in google and found some information but I am confused... Can someone explain me ? Thanks !

int i = 23;
char c = -23;

if (i < c)
{
    printf("Yes");
}
else
{
    printf("No");
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Unfortunately (imho) char is considered an integer type and you can treat it as an integer type without any explicit cast.

char is a different type than signed char and unsigned char. Whether char is unsigned or signed is implementation defined.

When used in arithmetic operations (including comparisons) integer types with rank less or equal to rank of int undergo integer promotion so your code is equivalent with:

if ((int)i < (int)c)

Another use for char is to access raw memory. C doesn't have a byte type and char is ... the byte type.


Just because you can doesn't mean you should. Use char for ... well ... characters. For memory access a lot of API uses char*, but if you can you should use unsigned char*. For small integers if you really need to save the space use int8_t and uint8_t which should be aliases for signed char and unsigned char respectively.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...