gpt4 book ai didi

c - 在 C 中,将 (char) 0xFF 左移 8 位并将其转换为 int

转载 作者:太空狗 更新时间:2023-10-29 16:39:53 27 4
gpt4 key购买 nike

将 (char) 0xff 左移 8 位并将其转换为 int,我们得到 -256 或 0xffffff00。有人可以解释为什么会发生这种情况吗?

#include <stdio.h>
int main (void)
{
char c = 0xff;
printf("%d %x\n", (int)(c<<8),(int)(c<<8));
return 0;
}

输出是

-256 ffffff00

最佳答案

char 可以是有符号的或无符号的 - 它是实现定义的。您看到这些结果是因为 char 在您的编译器上默认已签名。

对于带符号的字符 0xFF 对应于 −1(这就是二进制补码的工作原理)。当您尝试对其进行移位时,它首先被提升为 int 然后进行移位 - 您实际上得到了 256 的乘法。

所以是这段代码:

char c = 0xFF; // -1
int shifted = c << 8; //-256 (-1 * 256)
printf( "%d, %x", shifted, shifted );

关于c - 在 C 中,将 (char) 0xFF 左移 8 位并将其转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1097130/

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