2013-04-27 18 views
24

Przyglądałem się niektórym rozwiązaniom w Google Code Jam, a niektórzy wykorzystali to, czego nigdy wcześniej nie widziałem. Na przykład:Co to jest 1LL lub 2LL w C i C++?

2LL*r+1LL 

Co oznacza 2LL i 1LL?

Ich zawiera wyglądać następująco:

#include <math.h> 
#include <algorithm> 
#define _USE_MATH_DEFINES 

lub

#include <cmath> 

Odpowiedz

50

The LL powoduje całkowitą dosłownego typu long long.

Tak 2LL, jest 2 typu long long.

Bez nazwy LL literał będzie miał tylko typ int.

To ma znaczenie, gdy robisz rzeczy tak:

1 << 40 
1LL << 40 

Wystarczy dosłownym 1 (zakładając int być 32 bitów, to przesunięcie poza wielkością typu całkowitego -> niezdefiniowane zachowanie). W przypadku 1LL, przed wpisaniem, typem jest long long, a teraz zostanie poprawnie zwrócony 2^40.

+0

To jest * świetne * wyjaśnienie. –

+0

Rzeczywiście tak jest. Czy "long long" istnieje w C++? – Sebivor

+1

'long long' został dodany do najnowszego standardu C++, jak sądzę. Mimo to nie ma znaczenia, czy używasz wielkich liter "L" czy małych liter "l". Ponadto istnieje 'u' lub 'U' dla' unsigned' do łączenia się z nimi. –