Important note

I know that this question may seem too simple for you scientists; however, here is the best place that I know to post it.

Question

Suppose we have an int with all bits being 0, except for the last which is 11101000. How does my computer understand to return its two's complement i.e. -24 as value and not its original value i.e. 232?

Edit: Question Details

I have written the following simple C++ code which shows unsafe conversions:

int main()
{
double d = 1000;
{
int i = d;
char c = i;
cout << c;
}
}

The code returns -24 for c while the last byte of i which is the value of c is 11101000; Actually -24 is its two's complement, i.e. 00011000.

• What makes you think the computer understands that? Can you give us more context? Computers don't "understand" anything, so you must be interpreting some behavior you have observed; can you edit your question to explain what that is and the basis for your inferences?
– D.W.
Jun 13 '20 at 21:41
• Does this answer your question? Signed and unsigned numbers Jun 13 '20 at 21:42
• @D.W. --- Thanks, I edited it. Jun 14 '20 at 6:59
• @YuvalFilmus --- I read only the accepted answer, but it doesn't seem to answer my question. Jun 14 '20 at 7:01
• @Alish. Is your question "why is the returned value equal to the the integer represented by the last byte of (the representation of) 1000?" or "How does the computer know to print a the characters $\texttt{-24}$ from the byte 11101000? (or, more generally, any number from its representation in two's complement)" Jun 14 '20 at 7:15