除了从int升级到一线双倍之外,还有其他促销吗?
double d=-1./0;
unsigned int *pd = (unsigned int *)&d;
printf("1:%08x\n",*++pd);
printf("2:%08x",*--pd); 发布于 2020-02-04 15:16:00
除了从int升级到第一行双倍之外,还有其他促销吗?
不是的。
1.或1.0是double类型的常数。double.-不更改操作数的类型,因为它不是一个小整数类型,但是0是int类型,并作为/有类型double的算术结果的一部分提升到double。这是与变量d相同的类型,因此不发生lvalue转换。
详细信息:Implicit type promotion rules
与您的问题无关,将double d作为整数类型取消引用会调用未定义的行为错误:这违反了严格的混叠规则。在指向类型结束后执行指针算法也是未定义的行为。
发布于 2020-02-04 10:26:43
..除了0从整数提升到双倍..。
标准上没有用“晋升”这个词。该标准使用了“通常的算术转换”一词。
标准中的“促进”一词与“整数提升”相关,并说明在应用所使用的运算符之前,如何将不同的整数类型转换为通用的整数类型。
顺便说一句:让一个unsigned int指针指向一个double对象并取消它的引用,这违反了严格的混叠规则。
基于Ian:评论的编辑
术语“升级”也用于“默认参数提升”,这包括对函数的变量参数或没有原型的函数的参数进行双倍提升。
https://stackoverflow.com/questions/60055168
复制相似问题