Objective c 任意精度位操作(目标C)

Objective c 任意精度位操作(目标C),objective-c,integer,bit-manipulation,nsdata,arbitrary-precision,Objective C,Integer,Bit Manipulation,Nsdata,Arbitrary Precision,我需要对Objective C中任意精度数字的表示进行位运算。到目前为止,我一直在使用NSData对象来保存数字-有没有办法对这些数字的内容进行位移位?如果没有,是否有其他方法来实现这一点?使用NSMutableData您可以在字符中提取字节,将位移位并替换为-replaceBytesInRange:withBytes: 除了使用char*缓冲区保存原始数据编写自己的日期持有者类之外,我没有看到任何其他解决方案 如你所见,苹果不提供任意精度支持。未提供大于中1024位整数的任何内容 我也不认为N

我需要对Objective C中任意精度数字的表示进行位运算。到目前为止,我一直在使用NSData对象来保存数字-有没有办法对这些数字的内容进行位移位?如果没有,是否有其他方法来实现这一点?

使用
NSMutableData
您可以在
字符中提取字节,将位移位并替换为
-replaceBytesInRange:withBytes:


除了使用
char*
缓冲区保存原始数据编写自己的日期持有者类之外,我没有看到任何其他解决方案

如你所见,苹果不提供任意精度支持。未提供大于中1024位整数的任何内容

我也不认为
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
@接口NSData(班次)
-(NSData*)DATABYSHIFFINGLEFT:(NSUTEGER)位计数
{
//我们将一个字节一个字节地工作
整数整字节=位计数>>3;
int extraBits=位计数&7;
NSMutableData*newData=[NSMutableData dataWithLength:self.length+wholeBytes+(额外位?1:0)];
if(额外位)
{
uint8_t*sourceBytes=[self bytes];
uint8_t*destinationBytes=[newData mutableBytes];
for(int index=0;index>(8位额外字节))|
(sourceBytes[index+1]>(8个额外位);
}
其他的
/*只需将所有self复制到新数据的开头*/
返回新数据;
}
@结束
当然,这假设您想要移位的位数本身可以表示为
整数
,以及其他SIN