LoginSignup
2
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-07-11

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
}

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

2
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1