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

objective-c – 为什么 NSUInteger如何返回一个负数?,第1张

概述有一个单独的无符号类型,即NSUInteger,如果没有保证(甚至,似乎是一个机会),你可以假设,押注你的底部美元,或者让自己哭泣 – 这个名字意味着什么 – 本质上是非负的结果. NSUInteger normal = 5;NSUInteger freaky = normal - 55;NSLog(@"%ld, %ld", normal, freaky); NSLOG 5,-50 当然,我可 有一个单独的无符号类型,即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 caseNSUInteger result = (x >= y) ? (x - y) : 0; // If it should be an errorif(x < y){    // Report error}
总结

以上是内存溢出为你收集整理的objective-c – 为什么/ NSUInteger如何返回一个负数?全部内容,希望文章能够帮你解决objective-c – 为什么/ NSUInteger如何返回一个负数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1027651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存