I have been advised in this forum discussion that the char datatype is not always 'signed', and in particular on the arduino zero is treated as 'unsigned' by default.
I suggest thispage should be updated to reflect this because it currently suggests the approach is consistent across all arduino platforms.
Thanks