In C, a char is an integer type used to store character data, typically 1 byte. The value stored in i is 0x80 a hexidecimal constant that is equal to 128 . An arithmetic operation on two integer types (such as i << 1 ) will promote to the wider type, in this case to int , since 1 is an int constant.