gpt4 book ai didi

c - 关于常用算术转换的问题-GCC编译器

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

我试图理解 C 中的隐式数据类型转换。我认为我已经理解了这个主题,但下面的代码示例仍然让我感到困惑。

具体来说,我之前从 C 标准的草案中读到了关于常用算术转换和整数提升的内容。

    unsigned short int a = 0;
printf("\n%lld", (signed int)a - 1);

我正在使用 GCC 进行编译。

unsigned short int 是 2 个字节。int 是 4 个字节。

当我运行这段代码时,我得到以下结果:4294967295

我期望结果 -1

这是我期望发生的事情:

  1. Typecast优先,-的LHS变为signed int

  2. - 操作被执行。此处没有整数提升或隐式转换发生,因为 LHS 和 RHS 已经都是 signed int。运算结果为 -1,数据类型为 signed int

  3. printf语句中,值-1在转换为long long int时保留,结果显示为-1。

谁能解释一下我逻辑上的缺陷在哪里?

最佳答案

这是未定义的行为,因为%lldint 类型的不合适的格式说明符。

确实 (signed int)a - 1 是一个 int 类型,值为 -1,但是 printf 调用是未定义的部分。 C 标准中没有任何内容表明会发生到 long long 的转换。

关于c - 关于常用算术转换的问题-GCC编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57670902/

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