The '<<' is bit shifting (left vs right, look up which is which). The '*' is pointing to the actual value of a pointer (de-referencing the pointer). As for the '++', that is an incrementing function (add one to the current value), due to precedence (and without runing experiments) I would speculate that it is incrementing the value the pointer is pointing to before the bit shifting (it could also be incrementing the actual pointer, that is what would require the experimentation (or a better memory for precedence)). This sort of stuff is very common in compute intensive code (which encryption/decryption is). Bit shifting is typically done in the register, so is very fast. Most compilers will also be able to do the incrementing (++) in a register as well, though more often it is just a notational convenience for C programmers.

that line first dereferences the pointer in, and then increments in to point to the next byte. the ' << 24 ' shifts the bits of what in points to 24 to the left. there is also an error in the function, the 2nd parameter is "unsigned *expkey" so it's missing the type.