2011-08-12 2 views
12

나는 Google Go tutorial을 읽고 상수 섹션에서 이것을보고하고있다 :0LL 또는 0x0UL은 무엇을 의미합니까?

내가 Google 검색을하려고 노력 0LL 또는 0x0UL

같은 어떤 상수가 없습니다 만 나오면 그 모든 인스턴스 곳입니다 사람들은이 상수를 사용하고 있지만 의미가 무엇인지에 대해서는 설명하지 않습니다. 0x는 16 진수 리터럴을 시작해야하지만 16 진수로 가능한 문자는 아닙니다.

+0

가 ... 검색을 시도 "나는 Google 검색을 시도" 용어 정수 상수 C++ LL'. :) –

+0

나는 항상 '리터럴'과 상수를 상수로 선언 된 변수로 생각했습니다. –

+0

충분하지만,'정수 리터럴 C++ LL'의 결과가 비슷하다고 생각합니다. :) –

답변

20

이들은 C 및 C++의 상수입니다. 접미사 LL은 상수가 long long이고, ULunsigned long을 의미합니다. 일반적

L 또는 llongU 또는 uunsigned 나타냄. 그래서 예.

1uLL 

은 유형이 unsigned long long 인 상수 1을 의미합니다.

1.0f // of type 'float' 
1.0  // of type 'double' 
1.0L // of type 'long double' 

및 문자열과 문자,하지만 그들은 접두사 :

이것은 또한 부동 소수점 숫자에 적용

'A' // of type 'char' 
L'A' // of type 'wchar_t' 
u'A' // of type 'char16_t' (C++0x only) 
U'A' // of type 'char32_t' (C++0x only) 
정수 상수 C와 C++에서

자신을 사용하여 평가 정수 오버플로로 인해 버그가 발생할 수있는 원본 유형 :

long long nanosec_wrong = 1000000000 * 600; 
//^you'll get '-1295421440' since the constants are of type 'int' 
// which is usually only 32-bit long, not big enough to hold the result. 

long long nanosec_correct = 1000000000LL * 600 
//^you'll correctly get '600000000000' with this 

int secs = 600; 
long long nanosec_2 = 1000000000LL * secs; 
//^use the '1000000000LL' to ensure the multiplication is done as 'long long's. 
구글 이동에

모든 정수는 (어떤 절단이 발생하지) 큰 정수로

var nanosec_correct int64 = 1000000000 * 600 

을 평가하고 더 "usual arithmetic promotion"

var b int32 = 600 
    var a int64 = 1000000000 * b 
    //^cannot use 1000000000 * b (type int32) as type int64 in assignment 

그래서 접미사가 필요하지 않습니다이된다. unsigned long0x0 16 진수가 0위한로서 long longUL 하나로서 지정

2

0LL은 0입니다.

0x0UL은 16 진수 표기법을 사용하여 부호없는 긴 0입니다. 0x0UL == 0UL.

2

LL 리터럴을 나타낸다. 따라서 0LL0x0UL은 같은 수이지만 다른 데이터 유형입니다. 전자는 long long이고 후자는 unsigned long입니다.

는이 지정자의 많은이 있습니다

1F // float 
1L // long 
1ull // unsigned long long 
1.0 // double 
+0

C 또는 C++에서'1D'와 같은 것이 없습니다. – kennytm

+0

@Kenny 오, 거기 있지 않니? 그렇다면'x.x'는 그 목적에 부합합니까? 정보를 가져 주셔서 감사합니다, 나는 D가 두 배가된다고 생각했습니다. –

+0

네 말이 맞아. – kennytm

2

+ C와 같은 언어에서, 그 접미사는 당신에게 정확한 유형을 말한다. 그래서 예를 들면.9는 int 변수이지만, 0LL이있는 long long

4

가 여러 가지 기본 숫자 유형은, 그리고 문자를 구별 :

0 // normal number is interpreted as int 
0L // ending with 'L' makes it a long 
0LL // ending with 'LL' makes it long long 
0UL // unsigned long 

0.0 // decimal point makes it a double 
0.0f // 'f' makes it a float