2013-04-27 12 views
24

Stavo guardando alcune delle soluzioni in Google Code Jam e alcune persone hanno usato queste cose che non avevo mai visto prima. Ad esempio,Cosa sono 1LL o 2LL in C e C++?

2LL*r+1LL 

Che cosa significano 2LL e 1LL?

loro include simile a questa:

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

o

#include <cmath> 

risposta

50

Il LL rende l'intero letterale di tipo long long.

Quindi 2LL, è un 2 di tipo long long.

Senza il LL, il valore letterale sarebbe solo di tipo int.

Questo è importante quando si sta facendo cose come questa:

1 << 40 
1LL << 40 

Con solo letterale 1, (assumendo int di essere a 32 bit, si sposta al di là della dimensione del tipo integer -> comportamento indefinito). Con 1LL, è possibile impostare il tipo su long long in precedenza e ora restituirà correttamente 2^40.

+0

Questa è una * grande * spiegazione. –

+0

In effetti lo è. Esiste 'long long' in C++? – Sebivor

+1

'long long' è stato aggiunto all'ultimo standard C++, credo. Detto questo, non importa se si usa maiuscolo 'L' o minuscolo' l'. Inoltre, c'è 'u' o' U' per 'unsigned' da combinare con loro. –