gpt4 book ai didi

cocoa - 有什么方法可以在核心数据中存储 unsigned long 吗?

转载 作者:行者123 更新时间:2023-12-03 16:10:50 24 4
gpt4 key购买 nike

CoreData 提供整数 16、整数 32 和整数 64 存储,但不支持任何符号限定符。您可以将无符号整型(32 位)存储为有符号长整型(64 位),并确保保留该值的整个范围,但无符号长整型似乎需要 128 位有符号整数来存储,这当然不是' CoreData 支持。那么有什么办法可以将 unsigned long 存储在 coreData 中吗?

最佳答案

[之前的评论升级为答案]

听起来对您来说重要的是位模式,而不是整数值本身。您可以将其存储为有符号的 - 只需将其转换为 C 有符号<->无符号转换不会强制数学正确性,而只是保留位。将其转换回去以使用它。

后续问题:

一般来说,在 (Obj-)C(++) 中,您可以将无符号整数值存储到具有等效有符号整数类型的变量中,反之亦然。当使用 2 的补码整数时,根据定义,从有符号到无符号的 C 转换相当于位复制,并且两种类型的大小相同。反之,无符号 -> 有符号,是“实现定义的” - 实际上通常意味着位复制。 Clang 和 GCC 都使用位复制,但如果您想绝对确定,可以使用union:

unsigned long r;
long l;

r = (unsigned long)l; // will always work (cast optional)

// following is l = (long)r (cast optional) without "implementation defined" risk
{ union { long sValue; unsigned long uValue; } tmp; tmp.uValue = r; l = tmp.sValue;}

但说实话,我怀疑有人会这么做! (注意:Clang 至少会将其编译为直接赋值(位复制)。)

关于cocoa - 有什么方法可以在核心数据中存储 unsigned long 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com