What does "If time_seconds_since_midnight_gmt > 0xFFFF" mean?
What this does is checking if the time_seconds_since_midnight_gmt is bigger than 65,535 - this is probably some sort of compensation - remember there's 86,400 seconds in a day.
What is happening here "latitude_decimal_degrees = Abs(latitude_decimal_degrees*60000)"
The decimal part of the latitude is being multiplied by 60,000 - this is pretty much context based what's going on - it's probably has something to do with the speed you are moving in - you should look into where this function is called from and try to figure out what the number range is that is going into this variable, and then try to deduce it from that.
How is the bit shift applied?
First 0x800000 is added (this is setting bit number 23 high)
Is the "AND" operation used between an int and hex value?
Yes. It seems like you're mixing things up - an integer value can be repesented in base 2 (binary), base 8 (octal), base 10(the usual way) and base 16 (hexadecimal) - it's still the same value.
What is the final value in pBuffer(1)? Please explain.
Okay - let's run through an example:
latitude_decimal_degrees = 0xE653 (58,963)
then add 0x800000
latitude = 0x80E653
then and with 0xFF0000
latitude = 0x800000
and finally right shift by 16
latitude = 0x000080
What this means on the other hand, is up for your interpretation.