gpt4 book ai didi

c - Puzzle by C 类型从 short 到 int 的提升

转载 作者:太空狗 更新时间:2023-10-29 14:52:50 25 4
gpt4 key购买 nike

我有一个问题需要任何专家的指导:

  1. 作为 short 的值type 作为参数传递给 printf()功能,它将自动提升为 int类型,这就是为什么 printf()函数会将值视为 int输入而不是 short类型。

  2. 所以基本上 short类型为 16 位宽,即 0000000000000000同时int类型为 32 位宽,即 00000000000000000000000000000000 .

  3. 假设我声明了一个变量调用 numshort键入并用值 -32 初始化它,这意味着 short 的最高有效位类型将为 1 ,即 0000000011100000 .

  4. 当我将此值传递给 printf() 时, 它将被转换为 int输入,所以它会变成 00000000000000000000000011100000 .

  5. 第4步,当转换为int时, 最高位是 0 .

  6. 为什么,当我使用 %hd说明符甚至 %d说明符,它仍然会提示我输入负值而不是正值吗?

最佳答案

不,short 和 int 都是有符号类型,所以它是通过符号扩展而不是 0 字节填充来提升的:

-32 short =                   11111111 11100000 
-32 int = 11111111 11111111 11111111 11100000

将 MSB 保留为 1,即负值。

您可以通过先将其转换为未签名来伪造您期望的行为,例如

printf("%d", (unsigned short)((short)(-32)));

关于c - Puzzle by C 类型从 short 到 int 的提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934812/

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