The answer is very simple and results from the way how negavie numbers are save in computer's memory.
I guess it is obvious for you what 1 << 7 means. It equals to 128. Your "-" sign just means you want to change te sign of the result so the final result is -128.
But why did you get someting different? Here is the answer:
Generally there a two types of variables: signed and unsigned.
Both types are saved in momory which actually doesn't know which type is begin used. It is just up to programmer to know what kind of number is stored.
When you declare a variable as unsigned, it can store values from 0 to n, where n is the maximum value for a certain type of variable.
When you use signed one, you can store there a value from defined negative value, up to some defined positive value.
When unsigned variable is used, it is very simple to calculate is value.
Please consider a simple example of 8 bit (1 byte) unsigned variable:
the minimum value is 0 as I said before, and the maximum is 255 when all of 8 bits are set.
For the signed type of variable a special format is being used:
numbers from 0 to 127 are being saved the same way as for unsigned type. And the value of 127 is the maximum for a 8 bit variable. The minimum value is -128 and is stored as 0b10000000 or 0x80. Next one is -127 and is saved as 0b10000001 or 0x81 and so on. The biggest, negative number is -1 and is saved as 0b11111111 or 0xFF.
So if you have a byte value 0xff it can be both: 255 (when unsigned) or -1 (when signed).
The notation used here for signed types of variables is called U2 - please read about this.
In your particular case it looks like you have a signed (-128) value which was read as unsigned one. In your case a 32 bit (4 bytes) variable (probably (unsigned) int) was used so it looks a little bit different (the result is longer), but you may see some similarity: the last two digits for -128 in U2 system will always be 0x80 no matter how many bits are being used to store the value.