C语言学习【C语言基本数据类型二】

C语言学习【C语言基本数据类型二】

_Bool类型

C99标准添加了_Bool类型,用于表示布尔值,即逻辑值truefalse,原则上仅占用1位存储空间;

float、double和long double

记数法示例

C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是 1 0 − 37 1 0 + 37 10^{-37} ~ 10^{+37} 1037 10+37,通常,系统存储一个浮点数要占用32位;其中8位用于表示指数的值和符号,剩下24位用于表示非指数部分(也叫作尾数或有效数)及其符号。

C语言提供的另一种浮点类型为double(意为双精度),double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字,一般情况下,double占用64位;

C语言的第3中浮点类型是long double,以满足比double类型更高的精度要求;

声明浮点型变量

float noah, jonah;
double trouble;float planck = 6.63e-34;long double gnp;

浮点型常量

浮点型常量的基本形式是:有符号的数字(包括小数点),后面紧跟e或者E,最后是一个有符号数表示10的指数:

-1.56E+12
2.87e-3

正好可以省略,可以么有小数点(如,2E5)或指数部分(如,19.28),但是不能同时省略两者:

3.14159
.2
4e16
.8E-5
100.

不要在浮点型常量中间加空格:1.56 E+12这种写法错误;

通常,编译器假定浮点型常量是double类型的精度,在浮点数后面加上fF后最可覆盖默认设置,使用lL后缀使得数字成为long double类型;

C99标准可以用十六进制表示浮点型常量,在十六进制数前加上十六进制前缀(0x0X),用pP分别代替eE,用2的幂代替10的幂,例如0xa.1fp10,十六进制a等同于十进制10.1f1/16加上15/256p10 2 10 2^{10} 2101024
0xa.1fp10表示的值是(10 + 1/16 + 15/256)X1024,即十进制10346.0

打印浮点值

/* 以两种方式显示float类型的值 */#include "stdio.h"int main(void)
{float aboat = 32000.0;double abet = 2.14e9;long double dip = 5.32e-5;printf("%f can be written %e\n", aboat, aboat);/* 编译器支持C99 或其中的相关特性 */printf("And it's %a in hexadecimal, power of 2 notation\n", aboat);printf("%f can be written %e\n", abet, abet);printf("%Lf can be written %Le\n", dip, dip);return 0;
}

程序输出结果

32000.000000 can be written 3.200000e+004
/* 编译器不支持C99 */
And it's 0x1.f40000p+14 in hexadecimal, power of 2 notation
2140000000.000000 can be written 2.140000e+009
0.000000 can be written 3.172882e-317

浮点值的上溢和下溢

/* 浮点值的上溢和下溢 */#include "stdio.h"int main(void)
{float toobig = 3.4E38 * 100.0f;printf("%e\n", toobig);}

输出结果

1.#INF00e+000

上述程序为一个上溢(overflow)的示例,C语言规定,在这种情况放下给toobig赋值一个表示无穷大的值;

/* 浮点数舍入错误 */#include "stdio.h"int main(void)
{/* float 类型变量智能存储按指数比例缩小或方法的6或7位有效数字 */float a,b;b = 2.0e20 + 1.0;a = b - 2.0e20;printf("%f \n", a);return 0;}

程序运行结果

4008175468544.000000

显而易见,结果是错误的,float缺少左右的小数位来完成正确的运算.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作,你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印,这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …

EdgeOne 免费证书快速实现网站 HTTPS 访问

在当今互联网环境下,HTTPS访问已经成为现代网站的必备功能。HTTPS 访问不仅能够更有效地保障用户在访问到网站时的数据安全传输,防止信息泄露、消息劫持等问题,在搜索引擎中,未实现 HTTPS 还会被浏览器提示为不安全网站&#xff0…

迪安诊断数智中心战略与PMO负责人徐黎明受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 迪安诊断技术集团股份有限公司数智中心战略与PMO负责人徐黎明先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“软件研发项目管理指标体系建设实践”。大会将于6月29-30日在北京举办,敬请关注! …

C# WinForm —— 19 PictureBox 介绍

1. 简介 PictureBox 主要用于显示图像,也可以给它注册单击事件,来把它变成一个按钮 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 pixB 开头BackColor控件的背景色BackgroundImage控件的背景图像BorderStylePictur…

NSSCTF | [SWPUCTF 2021 新生赛]Do_you_know_http

打开题目后,显示:“Please use WLLM browser!” 说明这里需要伪装为名为WLLM的浏览器,直接Burpsuite抓包 我们需要修改的地方是上面的User-Agent 用户代理(User Agent,简称 UA),是一个特殊字符…

鸿蒙系统编译方式

鸿蒙系统编译 编译原理编译方式概述hb编译ohos-buildhb安装编译使用build脚本hpmhpm介绍编译举例说明综合应用举例虚拟机中编译docker中使用hpm编译编译原理 编译构建指导:https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-build-all.md,文档介绍…

VMware虚拟机故障:“显示指定的文件不是虚拟磁盘“,处理办法

一、故障现象 由于虚拟机宕机,强制重新启动虚拟机后显示错误,没有办法启动虚拟机。 虚拟机有快照,执行快照还原,结果也不行,反复操作,在虚拟机文件目录出现很多莫名文件 二、故障原因 根据故障提示&#…

计算机视觉的应用30-基于深度卷积神经网络CNN模型实现物体表面缺陷检测技术的项目

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用30-基于深度卷积神经网络CNN模型实现物体表面缺陷检测技术的项目主要包括:物体表面缺陷检测技术项目介绍,数据构造,模型介绍。 物体表面缺陷检测技术是工业自动化…

识别AI论文生成内容,降低论文高AI率

AI写作工具能帮我们在短时间内高效生成一篇毕业论文、开通报告、文献综述、任务书、调研报告、期刊论文、课程论文等等,导致许多人开始使用AI写作工具作为撰写学术论文的辅助手段。而学术界为了杜绝此行为,开始使用AIGC检测系统来判断文章是由AI生成还是…

使用Navicat将MySql数据库导入和导出

一,导出数据表 1.使用Navicat打开数据库,右键数据库,点击转储SQL文件,点击结构和数据。 2.选择生成文件的地方 3.等待生成完成 4.生成完成 二,导入数据库表和数据SQL文件 1.新建一个数据库 2.右键选择运行SQl文件 记…

Java 对象序列化

序列化:把对象转化为可传输的字节序列过程称为序列化。 反序列化:把字节序列还原为对象的过程称为反序列化 序列化的作用是方便存储和传输,细节可参考如下文章: 序列化理解起来很简单 - 知乎序列化的定义 序列化:把对…

基于SSM的“图书仓储管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“图书仓储管理系统”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统登录页面 人员管理信息页面 添加人员信息页…