Conversion de décimal long 64 bits en binary

OK, ce que j’essaie d’accomplir est assez simple même si j’ai toujours des problèmes.

Ceci est mon code:

- (NSSsortingng*)toBin:(long)dec { long num = dec; NSSsortingng *res = [NSSsortingng ssortingng]; for (long i=63; i>=0; i--) { long div = 1<<i; if ((num&div)==div) res = [res stringByAppendingString:@"1"]; else res = [res stringByAppendingString:@"0"]; } return res; } 

Et voici comment je le teste:

  for (long i=1; i<10; i++) { NSLog(@"%u = %@",i,[self toBin:(long)i]); } 

Cependant, le résultat de ce qui précède est:

 1 = 0000000000000000000000000000000100000000000000000000000000000001 2 = 0000000000000000000000000000001000000000000000000000000000000010 3 = 0000000000000000000000000000001100000000000000000000000000000011 4 = 0000000000000000000000000000010000000000000000000000000000000100 5 = 0000000000000000000000000000010100000000000000000000000000000101 6 = 0000000000000000000000000000011000000000000000000000000000000110 7 = 0000000000000000000000000000011100000000000000000000000000000111 8 = 0000000000000000000000000000100000000000000000000000000000001000 9 = 0000000000000000000000000000100100000000000000000000000000001001 

Donc, c’est presque correct (comme pour les 32 derniers bits), bien qu’il semble se dupliquer pour les 32 premiers bits. J’ai supposé que cela avait quelque chose à voir avec ma taille long , mais sizeof(long) renvoie 8 . Des idées?

Cette expression:

 long div= 1< 

C'est un int, pas un long.Alors vous obtenez un entier de 32 bits seulement (excusez-moi si je ne parle que pour ma machine) .Alors produisez une expression 64 bits:

 long div = 1l<