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