Hello,
On an ARM7, why isn't the value of 'my_char' truncated to the range of a signed char?
char my_char = 240;
I see that 'my_char' is stored in a register - fine, but why isn't that register ANDed with 127? The range of a char type on an ARM7 machine is -128..+127.
Thanks
Because it's machine- and compiler-dependent whether char is signed or unsigned.
If you require a variable to be a signed char, you will need to declare it as such. Alternatively, if you require variables declared as plain char to be signed or unsigned, you need to look whether the compiler offers an appropriate setting.
thanks for your answers. I have enabled the "Plain char is signed" option but still - it is treated as an unsigned thus is can contain 240 without overflow. where am I wrong?
Sorry - my mistake - a question of representation! I figured it out, thanks again.
It's a common situation that assigning a too large positive value to a signed value will end up being stored as a negative value.
The next issue is if the debugger will honor the "signed char" setting and present it as -16, or if it will present the value as 0xf0 or 240.