编程知识点(1)关键词之存储类型
作者:mrr 发布时间:2023-06-26 20:18:36
(应一些初学者的要求,虽然本人也绝对称不上专业,但是想让一个人快速地走出初学的迷茫,需要这种精炼的集合)
首先,阐明一下我的观点:
不论是什么编程语言,其实有很多的共通之处,基本上你学过一门编程语言,其他的语言也能很快学会.(本人学C++,但是会在必要的时候尽量避开语言特色只讲想法).
在这么广泛且有深度的领域中,有些功能的确没办法先让人理解内部构造再去使用,比如C++语言中的scanf,printf涉及到指针的传递事项和变参,cin,cout涉及到模板和重载运算符等等.但是我还是选择先从存储类型开始讲,上述的复杂的东西以后也会讲到(但是有C++语言特色要开Extra篇).
首先应当让大家知道的是计算机如果采用十进制在资源上(目前)是极为浪费,且性能不优的,而且二进制与十进制的转换是极为方便的,有兴趣可以自行百度"为什么计算机采用二进制",不浪费篇幅.
而正如人要写字,就要有纸和笔,计算机要记录信息,就要给计算机"纸"与"笔","纸"自然是有限的,而"笔"也是有规格的.内存就是计算机的"纸",而对内存读写的部件就是"笔".
(这么说来计算机的"笔"还可以读,哈哈)
但是,人脑所适应的是十进制,二进制对于我们来讲实在不易理解,而且计算机还要记录非阿拉伯数字的信息,比如我这篇文章,于是就有了ASCII编码,并有了对应的存储类型char(character),对于小一点的数有short int,大一点的数有int,再大一点有long long int,这些归到整数(integer)里面,而往往有时候我们要记录小数,于是在integer里面拿几位来记录小数点的(十进制)位置,就有了float(floating number)和double(Double-precision floating-point)
(想一想,为什么不是直接使用二进制记录小数,即记录二进制下的小数点位置?提示:将0.31试着转化成二进制小数,你会发现什么?)
然后把这些类型的属性与可能的bug讲一下,本篇就可以结束了
char:占1字节,记录[-128, 127](提示一下没看懂的小伙伴,这是闭区间,即包含两端点的区间)的整数,ASCII码表中一般期望背一下字符0的ASCII码,字符A的ASCII码,字符a的ASCII码以及空格和换行的ASCII码,下表中先了解[0, 127]码值对应的字符
([128, 255]的部分我想你在学了unsigned以后会明白的,或者我提示一下,你把这个码值转八位二进制看看有什么发现).
ASCII码表,来自网络
short int:占2字节,记录[-32768, 32767]的整数.
int:占4字节,记录[-2147483648, 2147483647]的整数.
long long int:占8字节,记录[-9,223,372,036,854,775,808, 9,223,372,036,854,775,807]的整数.
(想一想,为什么下限的绝对值比上限的绝对值多1?提示:从二进制符号位来思考"正负数"的个数是否相同)
(要讲浮点数,引入一下计算机上的科学记数法,比如6.02e23表示6.02乘以10的23次幂,指数为负数我不用说了吧)
float:占4字节,记录[3.4e-38, 3.4e38]的实数,有效位数为6~7位.(因为有一部分位拿出来记录小数点了,精确度比不上整数的),但是前期入门时用用足够了
double:占8字节,记录[1.7e-308, 1.7e308]的实数,有效数位为15~16位(据说double类型的处理在现代的优化下比float快...)
那么问题就来了:我有一个int类型(32位),如果我将一个占用32位以上的数据赋值给这个int会怎么样呢?答案是32位以上的内容丢弃,32位及以下的内容照搬,而符号位就有可能被赋到1的值,也就是有些时候数据溢出会出现负数,有的时候会有正数.如果上下限不够,我们会采用高精度的方式来扩大上下限,所以大部分情况下出现数据溢出的情况是程序员的不认真导致的bug.
来源:https://www.bilibili.com/read/cv6947311


猜你喜欢
- mysqladmin 工具的使用格式:mysqladmin [option] command [command option] comman
- 本文实例讲述了python去除文件中空格、Tab及回车的方法。分享给大家供大家参考,具体如下:在最近的开发工作中,为了应付比赛赶进度,服务端
- 我们先从一个常见的Python编程错误开始说起,我已经见过非常多的程序员犯过这种错误了:def do_not_raise(user_defi
- 小编把之前整理的关于mysql 5.7.9 免安装版配置方法分享给大家,供大家参考,具体内容如下1. 解压MySQL压缩包将下载的MySQL
- 一、背景交通大数据是由交通运行管理直接产生的数据(包括各类道路交通、公共交通、对外交通的刷卡、线圈、卡口、GPS、视频、图片等数据)、交通相
- 本地虚拟环境开发完成之后,上线过程中需要一一安装依赖包,做个记录如下:CentOS 安装python3.5.3wget https://ww
- 导入执行后VM292:1 thirdScriptError sdk uncaught third Error mod
- 数据处理在现代企业运营中变得越来越重要,越来越关键,甚至会成为企业发展的一项瓶颈. 数据保护的重要性也不言而喻. 如果一个企业没有很好的数据
- 1. MySQL索引概述1.1 索引的概念什么是索引,索引就是排好序的快速查找数据结构。1.2 索引的特点索引的优点1.提高数据检索的效率,
- 使用opencv相关函数确定图片中的直线#pip install opencv-python==4.4.0.42 opencv-contri
- 这次代码主要是实现列表的排序,使用sort函数实现,sort函数是对列表中的元素按照特定顺序进行排序,默认reverse,为false,从小
- 前言在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和val
- 1. Http标准库1.1 http客户端func main() {response, err := http.Get("http
- MyBatis 如何写配置文件和简单使用MyBatis3.x这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出。MyBatis的
- 写在前面的话:Part 1记得刚毕业那时,常幻想着自己是个大艺术家,满怀憧憬的想找一份理想的工作。后来入了行,慢慢的发现自己好像不是这块料;
- 多表查询1. 增删改一对多:先一后多,外键可以为对象或依赖表的主键(publish and book)publish = Publish.o
- 1. 解决思路首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载。解决方案:截图然后根据该图片的定位和长高
- 0. 学习目标线性表在计算机中的表示可以采用多种方法,采用不同存储方法的线性表也有着不同的名称和特点。线性表有两种基本的存储结构:顺序存储结
- 装饰器信号与槽所谓装饰器信号与槽,就是通过装饰器的方法来定义信号与槽函数,具体的使用方法如下@PyQt5.QtCore.pyqtSlot(参
- Javascript 中的闭包其实很改语言中很难理解的一部分。感谢 Stuart 提供了那么棒的 PPT,它深入浅出的解释了 Javascr