Longue de type 64 bits linux

Questions très simples, les gars, mais peut-être que je suis juste oublier quelque chose.
En 64 bits, linux, un long est 8bytes correct?
Si c'est le cas, et je veux définir le 64 bits, je peux faire ce qui suit:

unsigned long num = 1<<63;

Chaque fois que je compile cela, cependant, il me donne une erreur en disant que je suis de gauche déplacement de plus de la largeur.
Aussi, si je voulais prendre le premier 32bits de type long (sans l'extension du signe), je peux faire:

num = num&0xFFFFFFFF;

ou ce sujet:

num = (int)(num);

Merci.

Essayez: unsigned long num = 1UL << 63;
Pourquoi ne pas les afficher que comme une réponse avec l'entier de la promotion des trucs ?
Dépend du compilateur utilisé. De nombreux vieux compilateurs est par défaut à 32 bits longs, même si en cours d'exécution sur un ordinateur 64 bits. Confirmer que sizeof num est 8 avant d'essayer quelque chose de plus.
Après avoir répondu aux mêmes questions plusieurs fois et plus encore, il commence à se faire vieux. Donc je ne peux pas me faire plus d ' 1 ligne de réponse...
double possible de attention: décalage à gauche count >= largeur de type

OriginalL'auteur de1337ed | 2012-04-06