NSInteger 类型

Posted

技术标签:

【中文标题】NSInteger 类型【英文标题】:NSInteger types 【发布时间】:2011-06-22 23:15:14 【问题描述】:

我想知道Integer 16、Integer 32和Integer 64有什么区别,有符号整数和无符号整数的区别(NSInteger和NSUInteger)

【问题讨论】:

【参考方案1】:

我不确定您所说的“Integer 16”、“Integer 32”和“Integer 64”到底是什么类型,但通常,这些数字指的是整数类型的位大小。

有符号整数和无符号整数的区别在于它可以表示的值的范围。例如,一个二进制补码有符号 16 位整数可以表示介于 -32,768 和 32,767 之间的数字。一个无符号的 16 位整数可以表示 0 到 65,535 之间的值。

对于当今使用的大多数计算机,宽度为 n 的有符号整数可以表示值 [-2n-1,2n-1) 和一个宽度为 n 的无符号整数可以表示值 [0,2n)。

【讨论】:

感谢您的回答,是的,我的意思是 16 位整数、32 位整数和 64 位整数【参考方案2】:

NSInteger 和 NSUInteger 是 Apple 的自定义整数数据类型。第一个是签名的,而后者是未签名的。在 32 位构建中,NSInteger 被定义为 int,而在 64 位构建中,NSInteger 被定义为 long。 NSUInteger 被定义为 32 位的 unsigned int 和 64 位的 unsigned long。有符号类型覆盖范围 [-2^(n-1), 2^(n-1)],其中 n 是位值,无符号类型覆盖范围 [0, 2^n]。

在为单个独立程序编码时,使用 NSInteger 或 NSUInteger 被认为是针对未来平台位更改的最佳实践。在处理固定大小的数据需求(例如二进制文件格式或网络)时,这不是最佳实践,因为所需的字段宽度是预先定义的,并且无论平台位级别如何都是恒定的。这就是 stdint.h 中定义的固定大小类型(即 uint8_t、uint16_t、uint32_t 等)开始使用的地方。

【讨论】:

【参考方案3】:

无符号与有符号整数 -

无符号通常用于不允许变量取负数的地方。例如,在遍历数组时,如果数组下标变量是 unsigned int 并且循环直到数组的长度,它总是有用/可读的。

另一方面,如果变量也可以有负数,那么将变量声明为signed int。整型变量默认带符号。

【讨论】:

【参考方案4】:

看看Foundation Data types。 NInteger 和 NSUInteger 以及 int 和 unsigned int 的 typedef。

来自***

在计算中,有符号数 表示需要编码 二进制数中的负数 系统

这意味着您通常必须使用位来对符号进行编码,从而减少您可以表示的数字范围。

【讨论】:

以上是关于NSInteger 类型的主要内容,如果未能解决你的问题,请参考以下文章

在 NSInteger 返回类型方法上返回 nil

NSInteger 类型

不兼容的指针类型将“NSString *”发送到“NSInteger *”类型的参数(又名“int *”)

Nsinteger 可访问问题

将 NSInteger 类型的变量传递给 UIPageViewController

将 xcode 更新到 9.4 后,react native ios build 失败。错误是“NSInteger”类型的值