JSゆるふわめも

がっこうでべんきょうしたことをめもがきしてます

おそらくかなり賢い32 << (^unint(0) >> 63)

プログラミング言語Go練習問題6.5で、

プラットフォームに対して最も効率的な符号無し整数を使用するために、 かなり賢い式32 << (^uint(0) >> 63) を使える。

と説明されている。 uintはプラットフォームが32bit環境なら32bitの符号無し整数・64bit環境なら64bitの符号無し整数として振る舞う。 なので、^uint(0)は32bit環境ならば0を反転しているので、32bit立った状態を表している。

したがって、(^uint(0) >> 63)は63bit文右シフトしているので、32bitならば0になり、63bitならば最下位のbitだけが立っている状態になる。

となると32 << (^uint(0) >> 63)は32bit環境ならば32 << 0で32となり、64bit環境ならば32 << 1で64となる。

なので、 おそらくかなり賢い32 << (^unint(0) >> 63) はプラットフォームのbitサイズを返す式となっている。