NSInteger类型是什么?

5

我想了解Integer 16、Integer 32和Integer 64之间的区别,以及有符号整数和无符号整数(NSInteger和NSUInteger)之间的区别。

4个回答

11

我不确定你所说的“整数16”、“整数32”和“整数64”是指哪种类型,但通常这些数字指的是整数类型的位数大小。

有符号整数和无符号整数之间的差别在于它们可以表示的值的范围。例如,一个补码有符号16位整数可以表示从-32768到32767之间的数字。而一个无符号16位整数可以表示从0到65535之间的值。

对于今天大多数计算机来说,宽度为n的有符号整数可以表示值为[-2n-1,2n-1)之间的范围,而宽度为n的无符号整数可以表示值为[0,2n)之间的范围。


1
谢谢你的回答,是的,我指的是16位整数、32位整数和64位整数。 - Skullhouseapps

5

NSInteger和NSUInteger是苹果公司的自定义整数数据类型。前者为有符号类型,而后者为无符号类型。在32位编译中,NSInteger被typedef为int,在64位编译中则被typedef为long。NSUInteger在32位上被typedef为unsigned int,在64位上被typedef为unsigned long。有符号类型覆盖范围为[-2^(n-1), 2^(n-1)],其中n为位值;无符号类型覆盖范围为[0, 2^n]。

当编写单个、独立的程序时,使用NSInteger或NSUInteger被认为是未来防止平台位变化的最佳实践。但在处理固定大小的数据需求(例如二进制文件格式或网络数据)时,并不是最佳实践,因为所需的字段宽度已经在之前定义好了,不管平台的位级别如何,这些宽度都是恒定的。这就是stdint.h中定义的固定大小类型(例如uint8_t、uint16_t、uint32_t等)发挥作用的地方。


1

无符号整数 vs 有符号整数 -

无符号整数通常用于变量不允许取负数的情况。例如,在循环数组时,如果数组下标变量是无符号整数并循环到数组长度,这样做总是有用/可读的。

另一方面,如果变量也可以有负数,则将变量声明为有符号整数。整数变量默认为有符号。


1

请查看基础数据类型。NInteger和NSUInteger以及int和unsigned int的typedef。

来自维基百科

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接