Understanding Hexadecimal Representation of 64-bit Integer -1 in Go and C
In Go and C, the %x format is employed to print integers in hexadecimal notation. However, a divergence arises when applied to the negative 64-bit integer -1.
In Go, %x preserves the negative value, displaying "-1", while C outputs "ffffffffffffffff". This disparity stems from Go's strict type handling.
To print the hexadecimal representation of -1 as an unsigned integer in Go, explicit conversion is necessary. Converting it to uint ensures that the value is interpreted as an unsigned type:
fmt.Printf("%d %x %d %x", i, i, uint(i), uint(i))
This results in the output:
-1 -1 4294967295 ffffffff
The second hexadecimal value ("ffffffffff") represents the 2's complement of -1 when treated as an unsigned integer.
The rationale behind this behavior, as explained by Rob Pike, is to preserve the ability to print negative numbers in a compact format. If the %x format always treated arguments as unsigned, there would be no straightforward way to display negative values.
The above is the detailed content of Why Does `%x` Formatting Output Different Hexadecimal Representations for -1 in Go and C?. For more information, please follow other related articles on the PHP Chinese website!