EncodeInt64& DecodeInt64适用于无符号整数?

时间:2013-05-16 19:45:57

标签: objective-c cocoa

快速提问,当我使用编码器和解码器时,我有一条如下所示的行......

//.H File
@property uint64           docGroup;            //** declared in interface

//.M file
[aCoder encodeInt64:_docGroup forKey:@"docGroup"];

因为我使用的是无符号的int64,它会正确存储所有'64'位吗?我担心它会落后于最后一点。我很好奇这种情况下的行为是什么。有人知道吗?

我找不到函数encodeUnsignedInt64,如果有的话请告诉我。

2 个答案:

答案 0 :(得分:1)

是的,应该没事;有符号和无符号的64位整数都使用所有64位。

使用(在调试器中)进行测试:

uint64_t u64 = 0xfedcba9876543210ULL;
int64_t i64 = (int64_t)u64;
u64 = (uint64_t)i64;

答案 1 :(得分:1)

如果我正确理解Signed to unsigned conversion in C - is it always safe?的答案,将uint64转换为签名int64通常取决于实施, 但在具有负数的二进制补码表示的体系结构中,转换不会改变位模式。

因此,从uint64int64并返回uint64的转换始终会产生原始值。