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<