Question: I'm trying to figure out how it is that two variable types that have the same byte size?

If i have a variable, that is one byte in size.. how is it that the computer is able to tell that it is a character instead of a Boolean type variable? Or even a character or half of a short integer?

Answer: 
The processor doesn't know. The compiler does, and generates the appropriate instructions for the processor to execute to manipulate bytes in memory in the appropriate manner, but to the processor itself a byte of data is a byte of data and it could be anything.

The language gives meaning to these things, but it's an abstraction the processor isn't really aware of.
In general, it can't. Look at the restrictions of `dynamic_cast<>`, which tries to do exactly that. `dynamic_cast` can only work in the special case of objects derived from polymorphic base classes. That's because such objects (and only those) have extra data in them. Chars and ints do not have this information, so you can't use `dynamic_cast` on them.