我想知道Integer 16,Integer 32和Integer 64之间有什么区别,以及有符号整数和无符号整数之间的区别(NSInteger中的NSInteger)
答案 0 :(得分:11)
我不确定“Integer 16”,“Integer 32”和“Integer 64”的确切类型,但通常这些数字是指整数类型的位大小。
有符号整数和无符号整数之间的差异是它可以表示的值的范围。例如,带二进制补码的16位整数可以表示介于-32,768和32,767之间的数字。无符号的16位整数可以表示0到65,535之间的值。
对于今天使用的大多数计算机,宽度为 n 的有符号整数可以表示值[-2 n -1 ,2 < sup> n -1 )和宽度为 n 的无符号整数可以表示值[0,2 n < / SUP>)。
答案 1 :(得分:5)
NSInteger和NSUInteger是Apple的自定义整数数据类型。第一个是签名而后者是未签名的。在32位构建中,NSInteger作为int类型定义,而在64位构建时,它的typedef为long。 NSUInteger的typedef为32位无符号整数和64位无符号长整数。有符号类型涵盖范围[-2 ^(n-1),2 ^(n-1)],其中n是位值,无符号类型覆盖范围[0,2 ^ n]。
编写单个自包含程序时,使用NSInteger或NSUInteger被认为是针对平台位更改进行面向未来的最佳实践。在处理固定大小的数据需求时,例如二进制文件格式或网络,这不是最佳实践,因为无论平台位级别如何,所需的字段宽度都是先前定义的并且是常量。这是stdint.h中定义的固定大小类型(即uint8_t,uint16_t,uint32_t等)的用法。
答案 2 :(得分:1)
无符号vs有符号整数 -
无符号通常用于不允许变量采用负数的情况。例如,在循环遍历数组时,如果数组下标变量是unsigned int并且循环直到数组的长度,则它总是有用/可读。
另一方面,如果变量也可以有负数,则将变量声明为signed int。默认情况下会对整数变量进行签名。
答案 3 :(得分:1)
查看Foundation Data types。 NInteger和NSUInteger以及int和unsigned int的typedef。
来自维基百科
在计算中,签名号码 表示需要编码 二进制数的负数 系统
这意味着您通常必须使用一位来对符号进行编码,从而减少您可以表示的数字范围。