2017-10-23 37 views
-2

誰かがGolangの左/右シフト動作を説明できますか?ここでのサンプルコードを参照してください:https://play.golang.org/p/7vjwCbOEkwGolang符号付き数字の左/右シフト動作

package main 

import (
    "fmt" 
) 

func main() { 
    var lf int8 = -3 
    fmt.Printf("-3 : %08b\n", lf) 
    fmt.Printf("<<1: %08b\n", lf<<1) 
    fmt.Printf("<<2: %08b\n", lf<<2) 
    fmt.Printf("<<3: %08b\n", lf<<3) 
    fmt.Printf("<<4: %08b\n", lf<<4) 
    fmt.Printf("<<5: %08b, %d\n", lf<<5, lf<<5) 
    fmt.Printf("<<6: %08b, %d\n", lf<<6, lf<<6) 
    fmt.Printf("<<7: %08b, %d\n", lf<<7, lf<<7) 
    fmt.Printf("<<8: %08b, %d\n", lf<<8, lf<<8) 
    fmt.Printf("<<9: %08b, %d\n", lf<<9, lf<<9) 
} 

-3 : -0000011 
<<1: -0000110 
<<2: -0001100 
<<3: -0011000 
<<4: -0110000 
<<5: -1100000, -96 
<<6: 01000000, 64 
<<7: -10000000, -128 
<<8: 00000000, 0 
<<9: 00000000, 0 
+0

出力とは何を意味するのですか。何を見たいと思いますか?あなたのリンクは機能しません。 – gonutz

+0

@gonutz:https://play.golang.org/p/7vjwCbOEkw – jithin

+4

https://golang.org/ref/spec#Arithmetic_operatorsを参照して、シフトを探してください。説明することはあまりありません。 – Volker

答えて

5

-3two's complement11111101では、どのようなプログラムを印刷-0000011-と数の絶対値のバイナリ表現であるときに参照してください。 2の補数では、最高ビットは正(ゼロを含む)で0であり、負数では1です。この数字(11111101)を左にシフトすると、下位7ビットが左に1つ移動し、0が右から来て、下位ビットを置き換えます。あなたはちょうどあなたがそれがどのように動作するかを知っていれば、すべてが意味をなすだろう、2の補数としてすべてのビットパターンを考慮しなければならない

11111101 -3 11111010 -6 11110100 -12 11101000 -24 11010000 -48 10100000 -96 01000000 64 10000000 -128 00000000 0 00000000 0 ...

:あなたはあなたの例ではそうであるようにシフトすることになります。

関連する問題