You have some interesting observations.
ASCII is a definition. he value 20 in memory represent the ASCII char @ and 21 is the letter A. But they are not self-identified objects. I once had a student ask me how to you tell the difference between code and data. I did not quite know how to answer him. There are no built-in feature that do that, except by position. Having CODE in one part of memory and DATA in another part separates them only by position.
With C++ you should have a Development Environment that helps you visualize how things are done internally by the computer. But this does not mean you should lean all the possible codes to improve your skills. A common error for ome is to think that the literal form of a symbol is better that just using the symbol.
Consider this:
20
64
@
These can all be references to the same bye value in memory. Is it ASCII? Maybe, maybe not. Is it DATA? Yes, it is DATA. But is it Code? Again, that would depend on how and where it is being used.Many model tools, such as C++, requires us to make a meaningful expression of an idea that will be correctly put into suitable binary codes.
The sequence 2021 could be a special form of the AND instruction. Maybe not. Perhaps it was meant to be the just @A but not the AND instruction.
I do hope this was of some help.