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

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

【问题讨论】:

    标签: iphone objective-c xcode types integer


    【解决方案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。

        来自维基百科

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多