Characters are integers only . If you typecast integer as char , you get a character . So you can store integers as characters , there is no issue.
Now let's come to the code.
(100&0x0F)<<4 | (100&0xF0)>>4
| has the least precedence so will be done at the last.
(100&0x0F)<<4 = 01000000
(100&0xF0)>>4 = 00000110
(100&0x0F)<<4 | (100&0xF0)>>4 = 01000110
which is 70.