Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的数字数据类型比较#_C#_Floating Point_Comparison Operators - Fatal编程技术网

C# C语言中的数字数据类型比较#

C# C语言中的数字数据类型比较#,c#,floating-point,comparison-operators,C#,Floating Point,Comparison Operators,请您解释一下以下代码的结果: float f = 1.56898138E+09f; double d = 1.56898138E+09; int i = 1568981320; bool a = f > i; //false bool b = d > i; //true bool c = (int)f > i; //true 为什么a==false?存在从int到float的隐式转换。这是一个罕见的有损隐式转换示例 (flo

请您解释一下以下代码的结果:

    float f = 1.56898138E+09f;
    double d = 1.56898138E+09;
    int i = 1568981320;

    bool a = f > i; //false 
    bool b = d > i; //true
    bool c = (int)f > i; //true

为什么a==false?

存在从int到float的隐式转换。这是一个罕见的有损隐式转换示例


(float)1568981320=1568981376f
,与
f
的值相同,因此不大于或小于。

好的,
int
使用所有
32
位存储整数值

 1568981320 == 1011101100001001100000101001000 (binary)
float
使用
23
位时,只有第一位总是
1
(),所以 首字母
10111011000011000001001000
应四舍五入:

因此,当四舍五入时,我们应该扔掉
1001000
并添加
1

 1011101100001001100000101001000 - original value (1568981320)

 1011101100001001100000110000000 -  rounded value (1568981376)
  ^                     ^
  will be stored in float   

这是
1568981376
的值,它比原来的
1568981320

大。float是一个32位浮点数,double是一个64位浮点数,int是一个32位整数。因为
float
不够精确,无法表示
1568981320
。当
1568981320
转换为
float
时,结果是
1568981380
,因此
f==i
int
隐式提升为
float
,而不是相反)<顺便说一句,code>double足够精确,可以准确地表示所有可能的
int
值。
 1011101100001001100000101001000 - original value (1568981320)

 1011101100001001100000110000000 -  rounded value (1568981376)
  ^                     ^
  will be stored in float