2011-08-12 191 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. 
Googleの移動で

、すべての整数は、(何の切り捨てが起こりません)大きな整数として評価さ

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 long0x00の16進のようlong longULが1つを指定するよう

2

0LLは、長いlong zeroです。

0x0ULは、16進表記を使用して表される符号なしロングゼロです。 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

@ケニーああ、そこにいない? 'x.x'はその目的に役立ちますか?情報をくれてありがとう、私はDが2倍だと思った。 –

+0

はい、あなたは正しいです。 – kennytm

2

+ Cのような言語では、これらのサフィックスはあなたに正確な型を教えてください。したがって、たとえば。9があり、いくつかの異なる基本的な数値タイプがあり、文字がそれらを区別int変数ですが、0LLlong 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 
関連する問題