gpt4 book ai didi

objective-c - 为什么/NSUInteger 会返回一个负数?

转载 作者:太空狗 更新时间:2023-10-30 03:50:07 25 4
gpt4 key购买 nike

如果没有没有保证(似乎也没有机会),那么拥有一个单独的无符号类型(又名 NSUInteger)有什么意义呢? strong> 您可以假设、押注您的最低金额,或者为自己哭泣 - 顾名思义 - 固有的非负结果

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

但是编译器在这里提示......这是理所当然的,因此 comparison of unsigned expression >= 0 is always true - 就是这样,一个我不想要/不期望的答案。有人拍我的脸,给我倒杯酒,然后告诉我现在是哪一年......或者更好......怎么做 - 你知道 - 而不是那样做

最佳答案

%ld 告诉 NSLog 将其打印为带符号的整数。试试 %lu

参见 2's Complement在 wikipedia 上获取位级别上发生的事情的解释。

这里发生的是减法导致无符号整数表示回绕。为防止出现这种情况,您需要在执行减法操作之前进行检查。

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
}

关于objective-c - 为什么/NSUInteger 会返回一个负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11771710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com