In this example of x86_64 hex/disassembled code I see:
48B80000000000000000 mov rax, 0x0
Signed Byte 52
Unsigned Byte 52
Signed Short 14388
Unsigned Short 14388
Signed Int 943863860
Unsigned Int 943863860
Signed Int64 3472328296363079732
Unsigned Int64 3472328296363079732
Float 4.630555e-05
Double 1.39804332763832e-76
String 48B80000000000000000
which to me appears to have the same functionality as:
48C7C000000000 mov rax, 0x0
48C7C000000000
Signed Byte 52
Unsigned Byte 52
Signed Short 14388
Unsigned Short 14388
Signed Int 927152180
Unsigned Int 927152180
Signed Int64 3472328377950746676
Unsigned Int64 3472328377950746676
Float 1.163599e-05
Double 1.39806836023098e-76
String 48C7C000000000
How is the first example treated differently from the second example?
The C7 opcode moves a signed 32 bit number into a 64 bit register. It will sign-extend it, which means it will fill the high bits with whatever the sign bit of the source is, so that it will have the same value when interpreted as a signed number.
Since it’s an immediate value, the only difference that you’ll see is that the top one will support an immediate value of up to 64 bits long, but the bottom one will only support up to 32 bits.
Here are the relevant lines from Intel’s reference manual.