It is sort of machine dependent. Though, if you assume size of char as 8 byte, the reason behind the output as
@
is overflow in binary addition.
'A' has ASCII value of 65. In binary is 0100 0001
and 255 in binary is 1111 1111
If you add both of them, you will get 1 0100 0000 which indicates overflow.
Considering that the size of char is only 1 byte, now c will contain 0100 0000 which is 64.
If you look up in ASCII table, 64 represents @