2017-10-23 17 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 complement, 11111101에서, 어떤 프로그램 인쇄 -0000011-와 숫자의 절대 값의 이진 표현 때 참조하십시오. 2의 보수에서 최상위 비트는 양수 (0 포함)는 0이고 음수는 1입니다. 이 숫자 (11111101)를 왼쪽으로 이동하면 하위 7 비트가 왼쪽으로 이동하고 오른쪽에서 0이오고 가장 낮은 비트를 대체합니다. 당신이 당신의 예에서와 같이 이동하는 것이됩니다 : 당신은 그냥 당신이 어떻게 작동하는지 알면, 2의 보수로 모든 비트 패턴을 고려해야 할

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

, 모든 감각을 만들 것입니다.