加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读