objective-c – 为什么/ NSUInteger如何返回一个负数?

前端之家收集整理的这篇文章主要介绍了objective-c – 为什么/ NSUInteger如何返回一个负数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个单独的无符号类型,即NSUInteger,如果没有保证(甚至,似乎是一个机会),你可以假设,押注你的底部美元,或者让自己哭泣 – 这个名字意味着什么 – 本质上是非负的结果.

NSUInteger normal = 5;
NSUInteger freaky = normal - 55;
NSLog(@"%ld,%ld",normal,freaky);

NSLOG 5,-50

当然,我可以向后弯腰试图获得零或某种标准化值……

NSUInteger nonNeg = (((normal - 55) >= 0) ? (normal - 55) : 0);

PARRALELUNIVERSELOG 5,-50

但是在这里编译器抱怨..理所当然地,无符号表达式> = 0的比较始终是真的 – 并且它是,我不想要/期望的答案.有人拍我的脸,给我一杯饮料,告诉我它是哪一年……或者更好……如何制作 – 你知道 – 不要这样做.

解决方法

%ld告诉NSLog将其打印为有符号整数.试试%lu.

请参阅维基百科上的2’s Complement,以获取有关位级别内容的说明.

这里发生的是减法导致无符号整数表示环绕.为防止这种情况,您需要在进行减法之前进行检查.

NSUInteger x = 5; 
NSUInteger y = 55;

// If 0 makes sense in your case
NSUInteger result = (x >= y) ? (x - y) : 0; 

// If it should be an error
if(x < y)
{
    // Report error
}

猜你在找的Xcode相关文章