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
in other words, when I inspect the value of 'my_char' with the debugger, its value is 240 - it did not overflow.
With a range of -128 to +127 you need 8 bits. So the ANDing (if it were required) would be with 0xFF.
You're looking at one of those 'implementation defined' situations. For what you're asking, I can't remember seeing any other action.
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.