Sim*_*iwi 22 objective-c nsinteger nsuinteger
我正在尝试将NSInteger转换为NSUInteger,我用Google搜索并发现没有真正的答案.我该怎么做?
aro*_*oth 33
NSInteger并且NSUInteger只是原始整数类型的typedef:
#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
Run Code Online (Sandbox Code Playgroud)
因此,您不需要在它们之间"转换".一个简单的演员就足够了.喜欢:
NSInteger myInt = 0;
NSUInteger unsignedInt = (NSUInteger)myInt;
Run Code Online (Sandbox Code Playgroud)
由于这可能对其他遇到此问题的人有用,因此这里有一个小表格,显示了投射的实际效果.这些值直接从调试器中取为十六进制值.相应地选择,因为你可以看到铸造确实会产生影响.对于32位,丢弃底部ffffffff和16位lop关闭底部ffffffffffff.另请注意,-1始终为0xffffffffffffffff.
NSInteger si = NSIntegerMax; // si NSInteger 0x7fffffffffffffff
si = -1; // si NSInteger 0xffffffffffffffff
si = (NSInteger)-1; // si NSInteger 0xffffffffffffffff
si = (NSUInteger)-1; // si NSInteger 0xffffffffffffffff
si = NSUIntegerMax; // si NSInteger 0xffffffffffffffff
si = (NSInteger)NSIntegerMax; // si NSInteger 0x7fffffffffffffff
si = (NSUInteger)NSIntegerMax; // si NSInteger 0x7fffffffffffffff
si = (NSInteger)NSUIntegerMax; // si NSInteger 0xffffffffffffffff
si = (NSUInteger)NSUIntegerMax; // si NSInteger 0xffffffffffffffff
NSUInteger ui = NSUIntegerMax; // ui NSUInteger 0xffffffffffffffff
ui = -1; // ui NSUInteger 0xffffffffffffffff
ui = (NSInteger)-1; // ui NSUInteger 0xffffffffffffffff
ui = (NSUInteger)-1; // ui NSUInteger 0xffffffffffffffff
ui = NSIntegerMax; // ui NSUInteger 0x7fffffffffffffff
ui = (NSInteger)NSIntegerMax; // ui NSUInteger 0x7fffffffffffffff
ui = (NSUInteger)NSIntegerMax; // ui NSUInteger 0x7fffffffffffffff
ui = (NSInteger)NSUIntegerMax; // ui NSUInteger 0xffffffffffffffff
ui = (NSUInteger)NSUIntegerMax; // ui NSUInteger 0xffffffffffffffff
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24203 次 |
| 最近记录: |