任意精度的位操作(目标C)(Arbitrary precision bit manipulation

2019-10-29 06:15发布

我需要做的目的C.任意精度的数字表示到目前为止,我已经使用NSData的对象来保存数字被位操作 - 是有办法的内容特上移? 如果没有,是否有不同的方式来实现这一目标?

Answer 1:

使用NSMutableData你可以获取一个字节char ,改变你的位,取而代之的是-replaceBytesInRange:withBytes:

我没有看到任何其他的解决办法,除了用写你自己的日期holder类char *缓冲区来保存原始数据。



Answer 2:

正如你看准,苹果不提供任意精度的支持。 没有提供比1024位整数较大vecLib 。

我也并不认为NSData提供转变和卷。 所以,你将不得不推出自己的。 例如,一个很天真的版本,因为我在这里可以直接键入它可能有一些小错误:

@interface NSData (Shifts)

- (NSData *)dataByShiftingLeft:(NSUInteger)bitCount
{
    // we'll work byte by byte
    int wholeBytes = bitCount >> 3;
    int extraBits = bitCount&7;

    NSMutableData *newData = [NSMutableData dataWithLength:self.length + wholeBytes + (extraBits ? 1 : 0)];

    if(extraBits)
    {
        uint8_t *sourceBytes = [self bytes];
        uint8_t *destinationBytes = [newData mutableBytes];

        for(int index = 0; index < self.length-1; index++)
        {
            destinationBytes[index] =
                  (sourceBytes[index] >> (8-extraBits)) |
                  (sourceBytes[index+1] << extraBits);
        }
        destinationBytes[index] = roll >> (8-extraBits);
    }
    else 
        /* just copy all of self into the beginning of newData */

    return newData;
}

@end

当然,假设你想通过移动的位数是本身表达作为NSUInteger ,除其他罪。



文章来源: Arbitrary precision bit manipulation (Objective C)