web-dev-qa-db-ja.com

0LLまたは0x0ULはどういう意味ですか?

私は Google Goチュートリアル を読んでおり、定数セクションでこれを見ました:

0LLや0x0ULのような定数はありません

私はグーグル検索を試みましたが、出てくるのは人々がこれらの定数を使用している例ですが、それらが何を意味するのかについての説明はありません。 0xは16進数リテラルを開始することになっていますが、これらは16進数で使用できる文字ではありません。

22
Bjorn

これらは、CおよびC++の定数です。接尾辞LLは定数がlong long型であることを意味し、ULunsigned longを意味します。

一般に、各Lまたはllongを表し、各Uまたは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 Goでは、すべての整数が大きな整数として評価されます(切り捨ては発生しません)。

    var nanosec_correct int64 = 1000000000 * 600

" 通常の算術的昇格 "はありません

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

したがって、サフィックスは必要ありません。

31
kennytm

いくつかの基本的な数値タイプがあり、文字によって区別されます。

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
8
Tim

0LLは長い長いゼロです。

0x0ULは、16進表記を使用して表される、符号なしの長いゼロです。 0x0UL == 0UL

3
wallyk

LLはリテラルをlong longとして指定し、ULはリテラルをunsigned longとして指定し、0x00の16進数です。したがって、0LL0x0ULは同等の数値ですが、データ型が異なります。前者はlong longで、後者はunsigned longです。

これらの指定子は多数あります。

1F // float
1L // long
1ull // unsigned long long
1.0 // double
3
Seth Carnegie

+ Cのような言語では、これらの接尾辞は正確な型を示します。したがって、たとえば。 9はint変数ですが、0LLlong long

2
Charlie Martin