gpt4 book ai didi

ios - 将 unsigned int 与 %u 和 %x 一起使用时出现意外值

转载 作者:行者123 更新时间:2023-11-30 20:46:21 25 4
gpt4 key购买 nike

今天我正在开发一个示例 iOS 应用程序,其中包含如下代码:

unsigned int uCount = 0;
int iJoke = -7;
uCount = uCount + iJoke;

但是当我打印它时:

╔══════════════════╦══════════════════════╦════════════╗
║ Format Specifier ║ Print Statement ║ Output ║
╠══════════════════╬══════════════════════╬════════════╣
║ %d ║ NSLog(@"%d",uCount); ║ -7 ║
║ %u ║ NSLog(@"%u",uCount); ║ 4294967289 ║
║ %x ║ NSLog(@"%x",uCount); ║ fffffff9 ║
╚══════════════════╩══════════════════════╩════════════╝

我预计 %u 的输出为 7。

然后我用了这样的:

unsigned int i = 0;
int j = -7;
i = i + abs(j);

输出如下:

╔══════════════════╦══════════════════════╦════════╗
║ Format Specifier ║ Print Statement ║ Output ║
╠══════════════════╬══════════════════════╬════════╣
║ %d ║ NSLog(@"%d",uCount); ║ 7 ║
║ %u ║ NSLog(@"%u",uCount); ║ 7 ║
║ %x ║ NSLog(@"%x",uCount); ║ 7 ║
╚══════════════════╩══════════════════════╩════════╝

虽然我的问题已通过 abs() 解决,但我很好奇为什么 %u 在我的第一个案例中给出了 4294967289 作为结果。

请帮忙,先谢谢了。

最佳答案

此赋值将以表示 -7(2 的补码)的模式分配给无符号整数。这将是非常大的无符号值。

对于 32 位 int,这将是 2^32 - 7 = 4294967289

标准如下所示

“如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模 2^n,其中 n 是用于表示无符号类型的位数)。[ 注意:在二进制补码表示中,这种转换是概念性的,位模式没有变化(如果没有截断)。-尾注]

关于ios - 将 unsigned int 与 %u 和 %x 一起使用时出现意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17720925/

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