Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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
Java C中的浮动常数_Java_C_Casting_Types - Fatal编程技术网

Java C中的浮动常数

Java C中的浮动常数,java,c,casting,types,Java,C,Casting,Types,我有一个关于C中浮动常数的问题 在Java中,浮点常量的默认类型为double,因此以下情况将导致Java中的编译错误: float f = 100.0; // we either need to uses type case operator or put f at the end of the number constant. 这是因为默认的浮点常量是double类型,并且在没有类型转换运算符的情况下从double转换为float是一个错误,因此我们需要添加一个类型case运算符或在数

我有一个关于C中浮动常数的问题

在Java中,浮点常量的默认类型为double,因此以下情况将导致Java中的编译错误:

float f = 100.0;   // we either need to uses type case operator or put f at the end of the number constant.
这是因为默认的浮点常量是double类型,并且在没有类型转换运算符的情况下从double转换为float是一个错误,因此我们需要添加一个类型case运算符或在数字的末尾添加f


那么,为什么在C中这不会产生错误,是因为默认浮点常量的类型是float,还是因为编译器进行了隐式向下转换(在C中不需要类型case运算符)??

非固定浮点常量在C中也是双精度的。参见第6.4.4.2节:

你说得对,它在这里变窄了:

§6:3.1.5:

“当双精度被降级为浮动时 长双人被降级为双人或双人 浮点数,或以 更高的精度和范围比 根据其语义类型(请参见 6.3.1.8)显式转换为其语义类型,如果值为 转换后的图像可以精确地表示 在新类型中,它是不变的。如果 正在转换的值位于 可以修改的值的范围 代表但不能代表 确切地说,结果是 最近的高或最近的低 可表示的值,在 实施方式明确。如果 正在转换的值不在 可以修改的值的范围 表示,行为是 未定义。”

§6:5.16:

“赋值表达式的类型 是左操作数[…]的类型。“

§6:5.16.1:

在简单赋值(=)中,值 将右操作数的 赋值表达式的类型 并替换存储在中的值 由左边指定的对象 操作数。”


在C语言中,默认情况下浮点常量的类型为
double
,但
double
可以隐式转换为
float
(请注意,您必须小心:如果常量的值超出了
float
表示的范围,则这种转换的结果是未定义的)

如果您想要类型为
float
的浮点常量,可以将后缀
f
附加到该常量的末尾。

C无声地将double向下转换为float。而且,正如已经指出的,浮点文字被假定为双精度

在中,编译器选项-Wconversion(在-Wall中未暗示)会对此向下转换发出警告(例如,在文本分配中,如您的问题中)

警告:从转换为“浮动” “double”可能会改变其值