En langage C, vous pouvez convertir "0.5" en "1056964608" en une seule fois.
#include <stdio.h>
int main() {
float f = 0.5;
printf("%d\n", *(int *)&f); // => 1056964608
}
(Cependant, la méthode d'écriture change en fonction du système de traitement et de l'architecture du processeur. Ce qui précède est un exemple de MacOS Sierra et clang-900.0.39.2)
Comment puis-je écrire cela en langue Go? En conclusion, vous pouvez faire quelque chose de similaire avec le type ʻunsafe.Pointer`.
package main
import "fmt"
import "unsafe"
func main() {
var f float32 = 0.5
var p unsafe.Pointer
p = unsafe.Pointer(&f)
fmt.Printf("%d\n", *(*int32)(p)); // => 1056964608
}
Ce qui est utile, c'est que j'ai l'impression de jouer directement avec la mémoire.
Recommended Posts