相关疑难解决方法(0)

C++运算符中的隐式类型转换规则

我想知道什么时候应该投出更好.在添加,乘法等时,C++中的隐式类型转换规则是什么.例如,

int + float = ?
int * float = ?
float * int = ?
int / float = ?
float / int = ?
int / int = ?
int ^ float = ?
Run Code Online (Sandbox Code Playgroud)

等等...

表达式是否总是被评估为更精确的类型?Java的规则有所不同吗?如果我不准确地说出这个问题,请纠正我.

c++ casting implicit

156
推荐指数
5
解决办法
9万
查看次数

C中的隐式类型转换

我偶然发现了维基百科上的以下示例(http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion).

#include <stdio.h>

int main()
{
    int i_value   = 16777217;
    float f_value = 16777217.0;
    printf("The integer is: %i\n", i_value); // 16777217
    printf("The float is:   %f\n", f_value); // 16777216.000000
    printf("Their equality: %i\n", i_value == f_value); // result is 0
}
Run Code Online (Sandbox Code Playgroud)

他们的解释是:"这种奇怪的行为是由于i_value与f_value进行比较时隐式转换为浮动;一个失去精度的转换,使得比较的值不同."

这不对吗?如果i_value被转换为浮动,那么两者都会有相同的精度损失并且它们是相等的.所以i_value必须加倍.

c floating-point type-conversion

7
推荐指数
1
解决办法
5432
查看次数

float 变量如何自动提升为 double 类型?

我知道在 C 和 Java 中,float 的底层表示是 IEEE754-32,double 是 IEEE754-64。

在表达式中,float将自动提升为double. 又怎样?以 3.7f 为例。过程是这样的吗?

  1. 3.7f 将使用 IEEE754 在内存中表示。它适合 4 个字节。
  2. 在计算过程中,它可能被加载到一个64位寄存器(或任何64位的地方),把3.7f变成IEEE754-64表示。

c floating-point double ieee-754 type-promotion

4
推荐指数
1
解决办法
565
查看次数