I was reading some examples in how to convert char to int, and i have this code:
#include <stdio.h>
int main()
{
char ch1 = 125, ch2 = 10;
ch1 = ch1 ch2;
printf("%d\n", ch1);
printf("%c\n", ch1 - ch2 - 4);
return 0;
}
as i know that if we made any Character arithmetic the char type will convert to int
so why the result of first printf statement is -121 not 135 as i know int range will handle 135 so no overflow will happened.
the second printf statement will print y because we put %c in the printf .
CodePudding user response:
The "char" variable types usually default to the "signed char" type.
The "signed char" variables have a range of values from -127 to 127.
Exceeding this positive range limit caused the negative result from this program.
CodePudding user response:
As correctly pointed out by bolov, the result is a char type, so you are converting it back to char.
Explanation: Since the result of ch1 ch2
is stored in ch1
, which is a char type, the calculation operation will max out at 127 and will continue, starting from the lowest char value of -128. So the resulting ch1
will be -121:
ch1 = -128 - 1 (125 10 - 127)
or ch1 = -121
To resolve this, just store the result to an int
variable or if you really want to optimize the memory, then to an unsigned char
variable.
#include <stdio.h>
int main(){
char ch1 = 125, ch2 = 10;
unsigned char ch3;
ch3 = ch1 ch2;
ch1 = ch1 ch2;
printf("%d\n", ch1);
printf("%c\n", ch1 - ch2 - 4);
printf("%d\n", ch3);
return 0;
}
Result:
-121
y
135