2010-03-16 3 views
1

Sur la base du programme simple suivant, l'opérateur de décalage à gauche ne fonctionne que sur 32 bits. Est-ce vrai?Comment produire des masques 64 bits?

#include <iostream> 
#include <stdlib.h> 

using namespace std; 


    int main(void) 
    { 
     long long currentTrafficTypeValueDec; 
     int input; 
     cout << "Enter input:" << endl; 
     cin >> input; 
     currentTrafficTypeValueDec = 1 << (input - 1); 
     cout << currentTrafficTypeValueDec << endl; 
     cout << (1 << (input - 1)) << endl; 

     return 0; 

    } 

La sortie du programme:

Enter input: 
30 
536870912 
536870912 

Enter input: 
62 
536870912 
536870912 

Comment pourrais-je produire des masques 64 bits?

+0

Si vous incluez '', il s'agit d'une question C++! –

+1

Sauf que longtemps n'est pas actuellement partie de C++. –

Répondre

5

Renseignez également une entrée longue, et utilisez 1LL <(entrée - 1LL). Ici, votre décalage est calculé sur 32 bits et converti en 64 bits lorsqu'il est stocké dans currentTrafficTypeValueDec.