数据类型

  • 整型
  • 浮点型(实型)
  • 写在最后的话

我们都知道C语言有很多数据类型,如char ,int ,double 等等,本篇博客我们来梳理分类一下这些数据类型,首先我们可以将数据类型分为两类,整型和浮点型(也就是实型)两大类,有些读者可能就会疑惑了,char不是字符类型吗?怎么没列出来呢,别着急先继续往下阅读,下面会给出解释。

整型

整型包含:
char — 大小为1个字节
[signed] char
unsigned char
short — 大小为2个字节
[signed] short [int]
unsigned short [int]
int — 大小为4个字节
[signed] int
unsigned int
long —比较特殊大小为4/8个字节具体大小和编译器有关
[signed] long
unsigned long [int]
long long — 大小为8个字节
[signed] long long
unsigned long long [int]

unsigned表示无符号数,最高位也表示数据,即所有比特位均为有效数据位。方括号内的内容可以省略不写,省略并无影响。
为什么把字符型放在这里呢,是因为C语言采取的是ASCII编码,而每一个字符都对应了一个ASCII码值,而每个ASCII码值都对应了一个整数值(下面贴出了ASCII码表,博主在百度随便找的),所以就导致字符型的存储形式和整型其实一致,举个例子a和97(a的ASCII码值为97),看下图,所以博主就将char(字符型)放到了整型之中,现在大家可以理解了吗?


那么整型数据的存储形式到底是什么样的呢?答案是以二进制的补码形式储存的,二进制想必大家都知道,那么补码又是什么呢?那么又为什么会出现补码这个概念呢?
计算机以补码形式存储数据,并规定正整数的原、反、补三者相同,而负整数原、反、补三者的关系是原码除符号位的所有位取反为反码,反码加1为补码。取反就是二进制中的0变1,1变0,简单的举个例子10和-10的二进制表示,以int为例:

00000000000000000000000000001010 — 原码(10)
00000000000000000000000000001010 — 反码
00000000000000000000000000001010 — 补码

10000000000000000000000000001010 — 原码(-10)
11111111111111111111111111110101 — 反码
11111111111111111111111111110110 — 补码

之所以出现补码这个概念,是因为采用补码可以将符号位和数值域统一处理; 同时,加法和减法也可以统一处理(CPU只有加法器),感兴趣的小伙伴可以自行百度了解。
在查看内存中数据的时候是以十六进制展示的,并且博主使用的编译器是vs2019属于小端字节序存储模式(简单理解为数据倒着存),所以实际在内存中看到10的应该是0a 00 00 00而不是直接翻译过来的00 00 00 0a,而-10应该为f6 ff ff ff

上图来自《C陷阱与缺陷》介绍了存储模式
说了这么多不上代码就是在说废话,现在我们上代码验证一下我们所说的



可以看到结果我们我们想的一样,所以说整型是以二进制补码形式进行存储的,其余形式小伙伴们可以自行测试一下,接下来我们聊聊浮点型。

浮点型(实型)

浮点型包括
float — 单精度 大小为4个字节
double — 双精度 大小为8个字节
long double — 长双精度浮点型 大小为8个字节

那么浮点型和整型的储存形式的区别是什么呢?浮点型中可没有反码补码的概念
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:
V=(-1)^S * M * 2^E
(-1)^s表示符号,当s=0,V为正数;当s=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。



其中M放入内存时会隐去开头的整数1,只存入小数部分,因为M都是整数1开头,取出时加上开头的1即可,这样做既不会产生什么误会,还能增加一位精度,何乐而不为呢?
而其中的E为无符号整数,也就是说E只能为正数,但是实际应用中指数是存在要为负的情况,为了表示正负所以就出现了一个叫中间数的概念,存入E时需要先加上中间数,然后存入内存,IEEE 754规定双精度的中间数为1023,单精度的中间数为127,以float为例,举个例子:

E还有两种特殊的情况,当一个数的指数全为1或全为0时,其中全为1,那么E实际为128,2的128次方无疑是个非常大的数,又因为M是一个介于1 ~ 2之间的数,那么我们就可以简单的理解为这个数无穷大,全为0时,E的实际值应为-127,2的-127次方无疑是一个非常接近0的数字,所以这个数就可以直接把小数部分拿出来当作其本身的值不需要加上开头的1了,正负均取决于S,IEEE 754 也是这样规定的
上图是博主从C语言中文网截取下来的供读者参阅,原文链接附上戳我转到原文

写在最后的话

到此想必认真阅读思考的小伙伴们对整型和浮点型的存储已经有所了解了,这么多的数据类型也对应了很多格式控制符,每种格式符都对应了一种或多种的数据类型,如果不小心弄错了就会出现意料之外的运行结果,这个时候也没必要慌张,我们可以慢慢调试自己的代码,逐行寻找问题所在,好了本篇博客就到此结束了,希望能对小伙伴们有所帮助,由于本人水平有限,文章中难免有说错或表达不清楚的地方,欢迎小伙伴们在评论区留言提出,或私信本人指出,我们下篇博客见。

C语言整型,浮点型数据储存的超详细讲解相关推荐

  1. matlab整型和浮点的区别,技术帖 | 心理学MATLAB初学者教程--简单数据类型介绍(逻辑型数据,整型/浮点型数据,字符型)......

    1.2.1 什么是变量和变量名 变量这个词似乎在许多地方都有出现,在计算机中变量是指是一段有名字的连续存储空间(摘自百度百科),而这个所谓的名字就叫做变量名.举个例子说现在我们再MATLAB的命令窗口 ...

  2. 【C语言】C语言操作符的分类及应用【超详细讲解】

    指令系统的每一条指令都有一个操作符,它表示该指令应进行什么样性质的操作,不同的指令用操作符这个字段的不同编码来表示,每个编码分别代表一种指令.这篇文章主要给大家介绍了关于C语言中操作符的相关资料,需要 ...

  3. 字节数组byte[]和整型,浮点型数据的转换——Java代码

    近期在写C++ socket和java socket之间的通信程序,涉及到整数浮点数的传输.须要从字节数组还原数据,查了一些资料.总结例如以下 1.       整数和浮点数的机器表示 在机器内部.不 ...

  4. Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

    转载于:https://www.bilibili.com/video/BV12E411A7ZQ?spm_id_from=333.337.search-card.all.click 本文是根据视频教程记 ...

  5. C语言小项目-《通讯录》(超详细讲解)

    加油加油!!! 文章目录 前言 一:静态库通讯录 1:通讯录介绍 1.1代码主体框架的介绍 1.2 要实现的功能 2:通讯录实现 2.1 通讯录的外部封装 2.1 创建通讯录 2.2 初始化通讯录 2 ...

  6. 【C语言】用C语言实现最大公约数和最小公倍数【超详细讲解】

    最大公约数: "最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最 ...

  7. java语言中的浮点型数据分为,Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou...

    Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou 更多相关问题 [单选题]下列因素中不是经济中内在稳定器的是 [单选题]外在时滞是以下哪两 ...

  8. c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储

    C语言学习之浮点型数据 浮点数 浮点型数据分为单精度浮点型(float)和双精度浮点型(double). 单精度(float) 单精度浮点值 取值范围:1.2E-38 到 3.4E+38 精度:6 位 ...

  9. C语言的数据类型→浮点型数据

    C语言的数据类型→浮点型数据 一.浮点型常量的表示方法: C语言中的浮点数(floating point unmber)就是平常所说的实数. 浮点数有两种表示形式: (1).十进制小数形式.它由数字和 ...

最新文章

  1. 哈夫曼编码(Huffman)Java实现代码简化版
  2. 0002_20190328_Centos修改系统时间
  3. 【原】继承AbstractRoutingDataSource再通过AOP实现动态数据源切换
  4. java 观察者模式_Java技术干货分享:深入理解观察者模式原理与技术
  5. java为学生s1的age属性_求解java程序,题目如下
  6. 转载 实践与分享:Windows 7怎么获取TrustedInstaller权限【图文教程】
  7. dcp9020cdn可以打印a3纸吗_兄弟DCP-9020CDN打印机驱动(兄弟9020CDN打印机驱动程序)V1.0 正式版...
  8. 洛谷P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)
  9. 零基础学python图文版-杭州零基础学python图文版
  10. Asp.net文章内容分页
  11. Centos 7.X 安装 supervisord
  12. 数据结构严蔚敏 #二叉树 代码复现
  13. C语言中,int、char、float、double各占多少字节
  14. 计算2+4+6...+100的值 python_Python100例核心知识,你知道多少
  15. gcj编译java_用GCJ编译Java源文件成脱离JRE的exe可执行文件
  16. 神兵利器——敏感文件发现工具
  17. 图像识别的答题卡计分
  18. java免费批注组件_Java给Word某个字串加批注
  19. 【金猿产品展】齐治DSG数据库安全网关系统——统一的数据库操作管控平台
  20. 软考之路--小桥流水人家

热门文章

  1. 基础类型和引用类型的区别
  2. Unity 进入游戏后没有声音
  3. 想创业或找兼职,先看看下面的文章交流一下(转载)
  4. 创龙28377d历程_广州创龙SOM-TL138/1808/6748核心板 JTAG仿真器接口/LED
  5. 测量模型不确定性的两种简单方法
  6. 全球细胞和组织培养试剂行业调研及趋势分析报告
  7. No module named ‘PCV‘与解决OSError: xxx not found.
  8. NFT 的产业链与价值转换
  9. 【成为架构师课程系列】高并发系统设计的三大目标:高性能、高可用、可扩展
  10. Mac进度条卡在100%