2016-10-10 7 views
1

현재 Go Lang 자습서 인 "숫자 상수"를 정확하게 수행하고 있습니다. 나는 다음과 같은 얻을,큰 숫자 인쇄로 이동

fmt.Printf("%T", Big) 
fmt.Println(Big) 

을하지만 : 예제 코드는 다음과 같은 문장으로 시작 :

const (
    // Create a huge number by shifting a 1 bit left 100 places. 
    // In other words, the binary number that is 1 followed by 100 zeroes. 
    Big = 1 << 100 
    // Shift it right again 99 places, so we end up with 1<<1, or 2. 
    Small = Big >> 99 
) 

이 상수 Big 분명히 큰이며, 나는 다음과 같이 IT와 유형을 인쇄하려고 두 라인 오류 :

# command-line-arguments ./compile26.go:19: constant 1267650600228229401496703205376 overflows int

I는이 같은 오류로 넘쳐 uint64로, 다른 유형에 큰 캐스팅 시도하거나 그냥 변환 것 문자열에 t, 그러나 나는 다음과 같은 오류 얻을 Big.String() 시도 :

Big.String undefined (type int has no field or method String)

그 형태가 int이다, 그러나 나는 그것을 인쇄하거나 아무것도 캐스팅하고 모든 메소드를 오버 플로우 수 없다는 나타납니다. 이 번호/개체로 무엇을 할 수 있습니까? 어떻게 인쇄합니까?

+3

헌장 : 가장 쉬운 방법은 기본 10 문자열을 사용하는 아마. const의 개념은 컴파일 중에 만 존재하며, const는 임의의 (거의) 정밀도와 크기이며 산술 연산이 가능합니다. const를 사용할 때 "적절한"유형으로 변환됩니다. 이 변환은 프로그램이 잘못된 경우처럼 실패 할 수 있습니다. '빅 '을 인쇄하는 (직접적이고 간단한) 방법은 없습니다. – Volker

+1

[상수에 산술 연산을 수행하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/38982278/how-does-go-perform-arithmetic-on-constants) – icza

답변

0

이 값은 64 비트 숫자 유형이 가질 수있는 값보다 커서 직접 조작 할 방법이 없습니다.

math/big 패키지로만 조작 할 수있는 숫자 상수를 작성해야하는 경우 패키지를 사용할 수있는 형식으로 직렬화하여 저장해야합니다. 그들은 다른, 이동에 const를 할 될 일이 _not_ 일반 변수는를

https://play.golang.org/p/Mzwox3I2SL

bigNum := "1267650600228229401496703205376" 
b, ok := big.NewInt(0).SetString(bigNum, 10) 
fmt.Println(ok, b) 
// true 1267650600228229401496703205376