C语言菜鸟入门·关键字·float以及double的用法

xwbar的头像
2025-10-26 20:37:35
/
世界杯克罗地亚

目录

1. float关键字

1.1 取值范围与精度

1.2 运算

1.2.1 加法运算

1.2.2 减法运算

1.2.3 乘法运算

1.2.4 除法运算

1.3 输出

1.3.1 基本输出

1.3.2 控制小数位数

1.3.3 科学计数法输出

1.3.4 控制字段宽度和对齐方式

1.3.5 打印 float 类型的十六进制表示

1.3.6 输出特殊情况

无穷大(Infinity)

非数值(NaN)

2. double关键字

2.1 精度

2.2 存储大小

2.3 数值范围

3. 更多关键字

1. float关键字

float 用于声明单精度浮点数变量,适用于需要表示较小范围浮动数值的场景。通常用于科学计算、物理模拟或财务计算等需要小数的应用。

语法示例:

float a = 3.14f; // 声明并初始化一个 float 类型变量

注意,给float类型的变量赋值时,要在数值后面加上一个f或F,表示这是一个float类型的常量,否则默认为double类型的常量,可能会造成精度损失或编译警告,例如:

float z = 2.71828f; //正确,使用float类型的常量赋值

float w = 2.71828; //不推荐,使用double类型的常量赋值,可能会损失精度或产生警告

1.1 取值范围与精度

float 通常使用 4 字节(32 位)存储。它基于 IEEE 754 浮点标准,包含 1 位符号位、8 位指数位和 23 位尾数位。这种表示方式使得 float 类型可以表示较小范围的数值,但精度有限。

float 的有效位数约为 6 到 7 位数字。表示范围大约是 -3.4 × 10^38 到 3.4 × 10^38。

具体结构:

1位符号位 | 8位指数位 | 23 位尾数位(M,也称为有效数字)

S | E (8 bits) | M (23 bits)

符号位(S):表示数值的正负。

S = 0:表示正数。 S = 1:表示负数。

指数位(E):表示数值的幂,使用偏移量(Bias)表示。对于 float,偏移量为 127。指数的实际值是 E - 127,即:

E = 00000000 表示指数为 -127(非标准化数)。 E = 11111111 表示指数为 +128(特殊数,如无穷大和 NaN)。

尾数位(M):表示数值的有效数字部分,尾数通常被假设为一个带有隐式前导 1 的二进制小数(对于规范化的数),例如 1.101。尾数实际存储的是这个数字去掉前导 1 后的部分。

例如,我们表示一个浮点数 -3.14 时:

符号位:由于数值是负的,符号位 S = 1。

指数:3.14 在二进制中大约等于 1.1001001 × 2^1,因此指数为 1。偏移量为 127,所以实际存储的指数部分是 1 + 127 = 128,即二进制的 10000000。

尾数:表示数字 3.14 时,需要将它转换为二进制形式并去掉前导的 1(如果是规范化数)。假设转换后的尾数是 1.10010010000111111011011。

最终表现形式:

S | E (8 bits) | M (23 bits)

1 | 10000000 | 10010010000111111011011

1.2 运算

float类型的变量可以进行各种算术运算,例如加减乘除、取余、自增自减等,例如:

1.2.1 加法运算

#include

int main() {

float a = 5.5, b = 2.3;

float result = a + b; // result = 7.8

printf("%f\n", result);

printf("%0.2f\n", result);

return 0;

}

1.2.2 减法运算

#include

int main() {

float a = 5.5, b = 2.3;

float result = a - b; // result = 3.2

printf("%f\n", result);

printf("%0.2f\n", result);

return 0;

}

1.2.3 乘法运算

#include

int main() {

float a = 5.5, b = 2.3;

float result = a * b; // result = 12.65

printf("%0.0f\n", result);

printf("%0.1f\n", result);

printf("%0.2f\n", result);

printf("%0f\n", result);

printf("%f\n", result);

return 0;

}

1.2.4 除法运算

#include

int main() {

float a = 5.5, b = 2.3;

float result = a / b; // result = 2.391304

printf("%0.0f\n", result);

printf("%0.1f\n", result);

printf("%0.2f\n", result);

printf("%0f\n", result);

printf("%f\n", result);

return 0;

}

由于浮点数的表示方式是近似的,所以在计算时可能会出现精度丢失。例如,某些小数无法用二进制精确表示,可能会导致结果误差。

#include

int main() {

float a = 0.1;

float b = 0.2;

float result = a + b;

printf("%f\n", result); // 输出可能为 0.300000 或 0.30000005,因浮点精度问题

return 0;

}

1.3 输出

上面我们也看到了,输出浮点数时,通常使用 printf 函数。你可以通过格式控制符指定输出的精度和格式。

1.3.1 基本输出

#include

int main() {

float num = 3.14159;

printf("%f\n", num); // 默认输出六位小数:3.141590

return 0;

}

1.3.2 控制小数位数

通过格式化输出控制浮点数的小数位数。比如,输出两位小数:

#include

int main() {

float num = 3.14159;

printf("%.2f\n", num); // 输出:3.14

return 0;

}

1.3.3 科学计数法输出

如果浮点数的值非常大或非常小,printf 会自动使用科学计数法表示,或者你可以强制它使用这种格式。

#include

int main() {

float num = 12345678.0;

printf("%e\n", num); // 输出:1.234568e+07

return 0;

}

1.3.4 控制字段宽度和对齐方式

你还可以控制输出的字段宽度和对齐方式。例如,确保输出浮点数占据 10 个字符的位置:

#include

int main() {

float num = 3.14159;

printf("%10.2f\n", num); // 输出: 3.14, 总宽度为 10

return 0;

}

%10.2f 表示输出的浮点数占 10 个字符的位置,其中 .2 表示保留两位小数。数字 10 会让输出对齐,即在数值前面填充空格。

1.3.5 打印 float 类型的十六进制表示

有时你可能想要查看浮点数的底层二进制表示。可以使用 %a 或 %A 输出浮点数的十六进制表示:

#include

int main() {

float num = 3.14159;

printf("%a\n", num); // 输出:0x1.91eb86p+1

return 0;

}

1.3.6 输出特殊情况

无穷大(Infinity)

如果浮点数运算超出了表示范围,C 语言会返回一个特殊的值——无穷大 (infinity)。例如,除以 0:

#include

int main() {

float num = 1.0 / 0.0;

printf("%f\n", num); // 输出:inf

return 0;

}

非数值(NaN)

当进行无效的数值操作时(例如 0 除以 0),会产生 "Not a Number"(NaN)。例如:

#include

int main() {

float num = 0.0 / 0.0;

printf("%f\n", num); // 输出:nan

return 0;

}

2. double关键字

在C语言中,double 是一个关键字,用来声明双精度浮点型变量。它是用于存储较大范围和更高精度的浮点数数据类型。与 float 类型相比,double 提供更高的精度和更大的数值范围,适用于需要更多精度的计算。

语法示例:

double variable_name;

2.1 精度

double 的精度比 float 高,通常为 15-16 位有效数字,而 float 只有 6-7 位有效数字。

#include

int main() {

double num1 = 3.14159265358979; // 声明一个 double 类型的变量

double num2 = 2.71828182845904;

// 打印两个 double 类型的变量

printf("num1 = %lf\n", num1); // %lf 用于输出 double 类型的浮点数

printf("num2 = %.15f\n", num2); // 控制输出精度,显示15位小数

return 0;

}

在 printf 中打印 double 类型的值时,可以使用 lf 作为格式说明符。尽管 lf 用于 double 类型,float 类型通常也使用 lf 来输出,这是因为在 printf 函数中 float 参数会自动提升为 double 类型。

%lf:打印 double 类型浮点数。%.nf:打印 double 类型浮点数并控制小数点后显示 n 位数字。

2.2 存储大小

在大多数平台上,double 占用 8 字节(64 位),而 float 占用 4 字节(32 位)。

2.3 数值范围

float 的范围:

最大值:大约是 3.4 × 10^38最小值:大约是 1.4 × 10^−45

这意味着 float 类型可以表示从非常小(接近 0)到非常大的数,但其精度相对较低,适用于大多数不要求高精度的应用。

double 的范围:

最大值:大约是 1.7 × 10^308最小值:大约是 5.0 × 10^−324

double 的数值范围比 float 更广,可以表示极大的数值,也可以表示非常接近 0 的小数。

3. 更多关键字

C语言32个关键字

跳转链接 第一类:数据类型关键字

A基本数据类型(5个)

void

声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果C语言菜鸟入门·关键字·void的用法-CSDN博客 char

字符型类型数据,属于整型数据的一种。

C语言菜鸟入门·关键字·char关键字-CSDN博客 int

整型数据,通常为编译器指定的机器字长。

C语言菜鸟入门·关键字·int的用法-CSDN博客 float

单精度浮点型数据,属于浮点数据的一种,小数点后保存6位。

C语言菜鸟入门·关键字·float以及double的用法-CSDN博客 double

双精度浮点型数据,属于浮点数据的一种,比float保存的精度高,小数点后保存15/16位。

B类型修饰关键字(4个)

short

修饰int,短整型数据,可省略被修饰的int。

C语言菜鸟入门·关键字·修饰关键字short、long、signed、unsigne详细-CSDN博客 long

修饰int,长整形数据,可省略被修饰的int。

signed

修饰整型数据,有符号数据类型。

unsigne

修饰整型数据,无符号数据类型。

C复杂类型关键字(5个)

struct

结构体声明。

C语言菜鸟入门·结构体·struct用法超详细解析_struct在c语言中用法-CSDN博客 union

共用体声明。

C语言菜鸟入门·关键字·union的用法-CSDN博客 enum

枚举声明。

C语言菜鸟入门·枚举类型·enum的使用详解-CSDN博客typedef 声明类型别名。

C语言菜鸟入门·各种typedef用法超详细解析-CSDN博客 sizeof

得到特定类型或特定类型变量的大小。

C语言菜鸟入门·关键字·sizeof的用法-CSDN博客 D存储级别关键字(6个)

auto

指定为自动变量,由编译器自动分配及释放。通常在栈上分配。

C语言菜鸟入门·关键字·auto的用法、register的用法-CSDN博客 static

指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。

register

指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。

C语言菜鸟入门·关键字·auto的用法、register的用法-CSDN博客 extern

指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的。

const

与volatile合称“cv特性”,指定变量不可被当前线程/进程改变

C语言菜鸟入门·关键字·const的用法、volatile的用法-CSDN博客 volatile

与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值。

第二类:流程控制关键 字

A跳转结构(4个)

return

用在函数体中,返回特定值(或者是void值,即不返回值)。

continu

结束当前循环,开始下一轮循环。

break

跳出当前循环或switch结构。

goto

无条件跳转语句。

分支结构(5个)

if

条件语句。

C语言菜鸟入门·判断语句(if语句、if...else语句、嵌套if语句)详细介绍_c语言else if-CSDN博客 else

条件语句否定分支(与if连用)。

switch

开关语句(多重分支语句)。

case

开关语句中的分支标记。

default

开关语句中的“其他”分治,可选。

C循环结构(3个)

for

or循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件。

do do循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件。

while while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件,以上循环语句,当循环条件

表达式为真则继续循环,为假则跳出循环。

C语言_时光の尘的博客-CSDN博客

关键字_时光の尘的博客-CSDN博客

4k电视亮度多少好
新区第一天冲80级 问道极速升级小攻略