I see lots of answers about signed/unsigned char but not this exact question so feel free to close/duplicate if there is already an answer.
I'm aware that in C and C++ the data type 'char' can be either signed or unsigned. I know that different platforms choose differently, however x86, and all the other platforms I've personally used chose 'char' to be signed.
It seems to me that there are some minor advantages to choosing an unsigned char, for example you can use the value as an array index if you wish to in order to categorize values, but presumably there are reasons, either language related, or in the target architecture that make signed a better choice.
What are those reasons?