为什么可以’;我们在c中的浮点数据类型中不使用任何修饰符吗

为什么可以’;我们在c中的浮点数据类型中不使用任何修饰符吗,c,linux,gcc,floating-point,C,Linux,Gcc,Floating Point,为什么不能在float数据类型中使用任何修饰符 #include <stdio.h> int main(void) { signed float a; short float b; return (0); } 为什么编译器会显示这个错误?理论上听起来不错,但实际上这些东西并没有真正起作用 按照浮点在内存中的布局方式,它们已经有了一个专用的符号位,因此float实际上已经是一个signed float 短期浮动没有足够的空间来容纳大量有意义的信息

为什么不能在float数据类型中使用任何修饰符

#include <stdio.h> 
int main(void) 
{ 
    signed float a; 
    short float b; 
    return (0); 
} 

为什么编译器会显示这个错误?

理论上听起来不错,但实际上这些东西并没有真正起作用

按照浮点在内存中的布局方式,它们已经有了一个专用的符号位,因此
float
实际上已经是一个
signed float

短期浮动没有足够的空间来容纳大量有意义的信息。如果我们假设一个
short float
有16位内存,那么在符号位之后,我们几乎没有足够的位来存储一个或两个精度数字和高度受限的指数

如果内存是关键的,那么您应该考虑使用定点数而不是<强>浮点< /强> ING点编号。


因为语言不允许这样做

C中有三种浮点类型:
float
double
longdouble
。不支持无符号浮点类型,也不支持除这三种类型以外的其他类型。(实现可以提供诸如扩展之类的类型。)

signed
unsigned
short
不是可以任意应用的限定符。它们仅作为预定义整数类型名称语法的一部分存在。第6.7.2节定义了类型说明符


显然,有些编译器确实支持将
短浮点
作为16位浮点类型,但它是非标准的。

因为
浮点
总是有符号的,并且具有固定的大小。(注:在独立环境中(例如,没有操作系统的嵌入式系统),如果语言的大部分是实现定义的,您将看到一个短浮点,但这不是标准C)请参阅研究C标准,例如IEEE754确实有一个16位浮点格式,在提供它的环境中调用
短浮点
。。。指数为5位,有效位为11位。
error: both ‘signed’ and ‘float’ in declaration specifiers
signed float a; 

error: both ‘short’ and ‘float’ in declaration specifiers
short float b;