2

OK、まだ問題がありますが、達成しようとしていることはかなり簡単です。

これは私のコードです:

- (NSString*)toBin:(long)dec
{
    long num = dec;
    NSString *res = [NSString string];

    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;
}

そして、これは私がそれをテストしている方法です:

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

ただし、上記の出力は次のとおりです。

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

したがって、上位 32 ビットについては重複しているように見えますが、(最後の 32 ビットについては)ほぼ正しいです。long私のサイズと関係があると思いましたsizeof(long)が、 8. 何か案は?

4

1 に答える 1

5

この式:

long div= 1<<i;

long ではなく int です。したがって、ちょうど 32 ビットの整数が得られます (私のマシンについてのみ話している場合はご容赦ください)。したがって、64 ビット式を生成するだけです。

long div = 1l<<i;
于 2012-12-09T18:36:31.747 に答える