我需要做的目的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)