gpt4 book ai didi

objective-c - SInt32 和 << 的问题

转载 作者:行者123 更新时间:2023-12-04 06:22:53 25 4
gpt4 key购买 nike

我有一段简单的代码:

char data[4] = { 0x13, 0x34, 0xad, 0xff };
int s = 0;

SInt32 tmp = data[s++]<<24;
printf("tmp= %x\n",tmp);
tmp += (data[s++]<<16);
printf("tmp= %x\n",tmp);
tmp += (data[s++]<<8);
printf("tmp= %x\n",tmp);
tmp += (data[s++]);
printf("tmp= %x\n",tmp);

我期望的输出是
tmp= 13000000
tmp= 13340000
tmp= 1334ad00
tmp= 1334adff

相反,我得到
tmp= 13000000
tmp= 13340000
tmp= 1333ad00
tmp= 1333acff

有人可以解释我为什么吗?

最佳答案

至少在一些运行 Objective-C 的平台上,字符是有符号的。默认情况下,它们可能在 Objective-C 中签名。

这意味着 0xad 和 0xff 是负数,因为它们具有负符号位 (MSB)。

因此,不是在倒数第二行添加 255,而是实际添加 -1。前面的加法同样涉及一个负数。

如果您将数据更改为“无符号字符”,这种行为应该会消失——尽管第一次转变可能会很有趣。

关于objective-c - SInt32 和 << 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6347884/

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