Reputation: 47
I am trying to understand what is going on with the code:
cout << '5' - '3';
Is what I am printing an int? Why does it automatically change them to ints when I use the subtraction operator?
Upvotes: 3
Views: 861
Reputation: 2294
The ASCII value of character is here
Every character in C programming is given an integer value
to represent it. That integer value is known as ASCII value of that character. For example: ASCII value of 'a' is 97. For example: If you try to store character 'a' in a char type variable, ASCII value of that character is stored which is 97.
Subtracting between '5' and '3' means subtracting between their ASCII value. So, replace cout << '5' - '3';
with their ASCII value cout << 53 - 51;
. Because Every character in C programming is given an integer value
to represent it.
There is a subtraction operation between two integer number, so, it prints a integer 2
Upvotes: 0
Reputation: 145239
In C++ character literals just denote integer values.
A basic literal like '5'
denotes a char
integer value, which with almost all extant character encodings is 48 + 5 (because the character 0 is represented as value 48, and the C++ standard guarantees that the digit values are consecutive, although there's no such guarantee for letters).
Then, when you use them in an arithmetic expression, or even just write +'5'
, the char
values are promoted to int
. Or less imprecisely, the “usual arithmetic conversions” kick in, and convert up to the nearest type that is int
or *higher that can represent all char
values. This change of type affects how e.g. cout
will present the value.
* Since a char
is a single byte by definition, and since int
can't be less than one byte, and since in practice all bits of an int
are value representation bits, it's at best only in the most pedantic formal that a char
can be converted up to a higher type than int
. If that possibility exists in the formal, then it's pure language lawyer stuff.
Upvotes: 5
Reputation: 223739
What you're doing here is subtracting the value for ASCII character '5'
from the value for ASCII character '3'
. So '5' - '3'
is equivalent to 53 - 51
which results in 2.
Upvotes: 1