Edited at

0.5を1056964608に一発で変換する方法

More than 1 year has passed since last update.

C言語では 0.5 を一発で 1056964608に変換するということができます。

#include <stdio.h>


int main() {
float f = 0.5;
printf("%d\n", *(int *)&f); // => 1056964608
}

(ただし処理系やCPUアーキテクチャによって書き方は変わる。上記は MacOS Sierraかつ clang-900.0.39.2での例)

これを Go言語で書くにはどうすればよいでしょうか。

結論から言うと 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
}

なんの役に立つのかというと、メモリを直接手でいじっている気分にひたれます。