objective-c – 为什么/ NSUInteger如何返回一个负数?
发布时间:2020-12-14 18:02:11 所属栏目:百科 来源:网络整理
导读:有一个单独的无符号类型,即NSUInteger,如果没有保证(甚至,似乎是一个机会),你可以假设,押注你的底部美元,或者让自己哭泣 – 这个名字意味着什么 – 本质上是非负的结果. NSUInteger normal = 5;NSUInteger freaky = normal - 55;NSLog(@"%ld,%ld",normal,fre
有一个单独的无符号类型,即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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |