gpt4 book ai didi

c - 类型转换 : double to char: multiple questions

转载 作者:行者123 更新时间:2023-12-02 02:46:37 27 4
gpt4 key购买 nike

考虑这段代码:

#include <stdio.h>

int main(void)
{
/* TEST 1 */
double d = 128;
char ch = (char)d;
printf("%d\n", ch);

/* TEST 2 */
printf("%d\n", (char)128.0);

/* TEST 3 */
char ch1 = (char)128.0;
printf("%d\n", ch1);
return 0;
}

结果:

        gcc*  clang*  cl*
TEST 1 -128 -128 -128
TEST 2 127 0 -128
TEST 3 127 -2 -128

* latest version

问题:

  1. 为什么测试之间的结果不同(不包括 cl)?
  2. 为什么编译器之间的结果不同(不包括 TEST 1)?
  3. 如果是 UB/IB,UB/IB 到底在哪里?标准怎么说?
  4. [额外问题]为什么clang表现出如此不同的行为?这些0-2从哪里来?

最佳答案

CHAR_MAX == 127 时,(char)128.0未定义行为 (UB)。

When a finite value of real floating type is converted to an integer type other than _Bool, the fractional part is discarded (i.e., the value is truncated toward zero). If the value of the integral part cannot be represented by the integer type, the behavior is undefined. C17dr § 6.3.1.4 1

由于整数溢出,这不是 UB。由于转换规则,它是UB。

关于c - 类型转换 : double to char: multiple questions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62682244/

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