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如何返回一个负数?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)