Hem*_*ang 1 comparison objective-c nsinteger nsuinteger ios
惊喜!
我有一个像这样的变量,
NSInteger index = 0;
Run Code Online (Sandbox Code Playgroud)
我正在将它与其中一个子视图count(返回NSUInteger)进行比较,
if((index-1) <= [[currentmonth subviews] count])
{
NSLog(@"true");
}
else
{
NSLog(@"false");
}
Run Code Online (Sandbox Code Playgroud)
这总是假的.
但如果我这样做,
if ((index-1) <= 42) {
NSLog(@"true");
} else {
NSLog(@"false");
}
Run Code Online (Sandbox Code Playgroud)
这总是给人的.
我觉得,这是因为我们无法NSInteger与NSUInteger正确比较?
当我有一个基于这种逻辑的工作解决方案时,我发现了这个问题.但它根本不是真的.
我发现了这个,NSUInteger vs NSInteger,int vs unsigned,以及类似的情况
这个答案给出了很好的解释!
在处理NSUInteger与NSInteger时,您还应该了解整数转换规则:
例如,以下片段返回0(false),尽管您希望它打印1(true):
NSInteger si = -1;
NSUInteger ui = 1;
printf("%d\n", si < ui);
Run Code Online (Sandbox Code Playgroud)
原因是[si]变量被隐式转换为unsigned int!
请参阅CERT的安全编码站点,深入讨论这些"问题"以及如何解决这些问题.
| 归档时间: |
|
| 查看次数: |
8160 次 |
| 最近记录: |