c++ - 将长 64 位十进制转换为二进制

标签 c++ objective-c c cocoa binary

好吧,尽管我仍然遇到问题,但我想要完成的任务相当简单。

这是我的代码:

- (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 位中进行了 self 复制。我猜这与我的 long 大小有关,但 sizeof(long) 返回 8。有什么想法吗?

最佳答案

这个表达式:

long div= 1<<i;

是一个 int,而不是 long。所以你得到一个只有 32 位的整数(请原谅我只针对我的机器说话)。所以只需生成一个 64 位表达式:

long div = 1l<<i;

关于c++ - 将长 64 位十进制转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13790318/

相关文章:

c++ - CMake FindBoost.cmake MinGW-W64 : searching for library with incorrect name

ios - 在单元格中的单击按钮上添加新的单元格行

ios - 解码为 png 时的 Base64 字符串被 Objective-C 截断

c - 如何求C数组的长度

c - 错误 : -ld returned 1 exit status.

c++ - 为项目构建大型库时的最佳实践

c++ - 气体粒子模拟碰撞计算C++

c++ - MVSC++中数组的内存分配

c++ - 通过 MPI 发送和接收 2D 数组

ios - 找到纸角