在学习任何东西之前,都需要先搞懂一个问题,那就是为什么需要它。当弄懂了一个概念为什么会存在的时候,也就理解了它存在的意义,顺便也掌握了相关的知识。

核心:学编程就是学变量。

(一)变量存在的意义是什么?

1. 思考一:程序被创造(写)出来有什么用?

我们想一下,美团、淘宝这些程序,被创造出来有什么用,是不是在市场上有这个需求,可以通过线上的途径解决时间、地点和效率的问题。QQ、微信被创造出来,解决了便捷沟通的需求;
所以一个有效的程序被创造出来一定是解决现实存在的问题和需求的。
那我们 接下来要思考的问题就是,程序是通过什么样的方式来解决现实问题和需求的?

2. 思考二:程序是通过什么样的方式来解决现实问题与需求的?

就是四个字:操作数据。我们来想想是不是这样:我们想一下美团,淘宝我们看到的是文字,图片,声音,影像,这些形式在程序中是不是以数据的形式存在的;我们在想我们使用软件,使用程序,我们的输入文字,我们的视频传输,这些交互是不是也是以数据的形式传输的;
所以说程序是以操作数据的方式来解决现实问题和需求的。

3. 思考三:对于程序来说,数据都在哪儿?程序是怎样操控数据的?

先说结论:数据都在内存中,在高级编程语言总,程序是使用变量来操控存储空间中的数据! 那变量又是怎样操控数据的呢?那我们就接下来说下面的内容:

(二)变量的底层逻辑是什么

1. 丰巢快递柜


我们可以看一下上面丰巢快递柜的图,我们说丰巢快递柜有下面几个特点:

  • 丰巢快递柜是可以循环使用的,那我们可以类比联想我们项目运行过程中,我们内存的空间是可以循环使用的;
  • 丰巢的柜子都是有大有小的,大的可以放大一点的快递,小的可以放小一点的快递;丰巢的柜子如果做成统一大小的,是不是会浪费一些空间;
  • 当用户在丰巢快递柜取快递的时候,是需要再快递柜中输入取件码的,那这个取件码一定是跟别人的取件码是不同的,如果是一样的取件码,那取件就会取错了;所以我们在调用一个变量的时候,我们变量名相同时,我们调佣也会有问题;

那我们搞丰巢,主要是为了管理包裹;那我们搞变量,主要是为了管理内存中的数据;而且我们内存中承载数据的空间都是循环使用的;

2. 变量的底层逻辑

用更书面一点的语言总结一下变量就是:我们通常会在内存中找一个位置来存放CPU要处理的数据,每个存放数据的位置都有一个“”地址” ,通过这个地址,CPU就可以找到并使用它们。这个存放数据的位置就是变量。

每个变量都有一个地址,这个地址其实就是一串数字,CPU 尤其擅长处理复杂的数字,但我们人类不一样,我们常常为了怕忘记一个电话号码而要拿一个小本记起来,更别说这些复杂的数字了。所以,后来发明了变量名,变量名就是给一个数据的“地址”贴上标签。这与我们小时候喜欢根据小伙伴的特点起外号是一样的,我们也根据这些数据的用途给它们起一个好记的名字,这就是变量名,一旦变量有了名字,就可以通过直呼其名的方式来使用它们。

我们现在有了变量名,那接下来我们顺理成章的就会思考,我们这个变量在内存中占用多大空间呢?我们是不是要设计一套模式,给内存合理的分配空间,就想丰巢快递柜要设计成有大的,有小的,不能一样大的一样。

那我们通过数据类型来实现,我们通过不同的数据类型来给内存分配不同的空间。

所以,我们总结一下:变量 = 变量名 + 数据类型;

3. 变量名和数据类型的注意事项

编程讲究的是规范,人可以感性,但是程序必须理性,所以规范很重要,每一种高级的编程语言都有对于变量名命名的规则,基本规则就是两点:

  • 第 1 点 :不能用关键字命名;
  • 第 2 点 :按照规矩命名,通用的命名规矩有驼峰命名法等;

下面说一下数据类型的注意事项,大部分主流高级编程语言中的数据类型都会是有这么几类,比如说整数类型,浮点数类型,字符类型、布尔类型等等,当然还有其他的数据类型,这些数据类型就好比它们给内存中分配了不同的空间,数据类型就是指这些内存空间的尺寸,我们也都会清楚的知道,编程语言中每种数据类型的尺寸,那获取数据类型的尺寸,无非就是为了求得它的取值范围,那取值范围意味着什么?取值范围就是意味着这个变量可以存放的最大值和最小值分别是多少。那这个值怎么计算呢?因为计算机只认识二进制,那我们要从二进制的单位-比特(bit)说起。CPU只能读懂比特这个最小单位。而我们人类则相反,我们人不喜欢用比特来计算,一般说内存机构的最小寻址单位是字节(Byte)而不是比特。

那字节和比特什么关系呢?1字节存放8比特,那么1字节等于8比特,用二进制表示是 11111111,而对应的十进制就是255,值是一样的,只是表示的方式不同而已。255就是1字节可以表示的最大值。

所以我们学习数据类型的时候,必然要学习进制转化,二进制的相关算法,那我们要掌握到什么程度,那jacky 说,在学习编程语言的基础阶段我们大概有个印象即可,后面 jacky 在后面的课程中,还会详细的讲究二进制的相关内容,在变量部分就不过多的介绍了。

好,以上就是这次 jacky(朱元禄)要跟大家分享的内容,我们下次课再见。

变量的存在意义和底层逻辑(《Java与Python学习通法》)相关推荐

  1. 你的眼中满是“变量”,可“变量”眼中是无相(Python)(Java与Python学习通法)

    (一)Python 中的变量 1. 什么是变量 任何计算机的CPU都不具备存储功能,比如我们用计算机计算 1+ 1 等于几这个问题,1+1 必须是存储形式存在于计算机中,然后计算机的CPU 才能计算: ...

  2. 你好,世界:第一个Java程序(《Java与Python学习通法》)

    大家好,我是 jacky 朱元禄,本小节jacky将跟大家分享第一个 java 程序,根据第一程序我们来总结一下 Java 程序的运行机制: 前面我们已经搭建好了 Java 的开发环境,那我们应该如何 ...

  3. Idea配置与项目导入(Java 与 Python 学习通法)

    (一)Idea 的配置 我们来看下 idea 如何帮我们创建项目做一些常见的操作 Idea 的配置大致分为两类: 基础配置 Settings 字体大小. 样式.快捷键设置.每行有几个空格等等 基于项目 ...

  4. python与java前景-java和python学习哪个未来发展前景更好?

    原标题:java和python学习哪个未来发展前景更好? 学java和python哪个更好?这是现在大家热议的一个问题. Python崛起这已经是一个不争的事实,并且已经成为人工智能时代的第一语言.P ...

  5. Java 转 Python 学习笔记-基础篇

    # 列表类型 names = ['李明博', '咖喱棒']# 字典类型 person = {'name':'咖喱棒', 'age':18}# 元祖类型 nums = (1,2,3,4,)# 集合类型 ...

  6. java章节测试学习通

    章节测验 测试1 已完成 已截止 1.[单选题] 下列哪个是Java应用程序主类中正确的main方法? 我的答案:D正确答案:D 2.[单选题] 对于下列源文件,哪个叙述是正确的? public cl ...

  7. 如何用“底层逻辑“看透世界的底牌?| 刘润最新演讲-学习总结

    底层逻辑 概念 1.私域流量的底层逻辑 2.理解他人的底层逻辑 3.社会协作的底层逻辑 4.是非对错的底层逻辑 5.讨论问题的底层逻辑 概念 底层逻辑:事物间的共同点:找到不同中间的相同之处,找到变化 ...

  8. 现在学python和java哪个好_java和python学习哪个未来发展前景更好?

    原标题:java和python学习哪个未来发展前景更好? 学java和python哪个更好?这是现在大家热议的一个问题. Python崛起这已经是一个不争的事实,并且已经成为人工智能时代的第一语言.P ...

  9. 学习 正则表达式 js java c# python 通用

    正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...

  10. scala语言的底层是java实现的_2020了,每个程序员都该学习的 5 种开发语言

    我曾在某处读到过(可能在<代码大全>,但我不敢确定),程序员应该每年学习一门新的编程语言.但如果做不到,我建议,你至少学习以下 5 种开发语言,以便你在职业生涯有很好的表现. 每个公司都喜 ...

最新文章

  1. SVN详解-linux+windows
  2. OrgChart 组织架构与PHP结合使用
  3. 隐藏input边框(ie6、ie7)
  4. 使用wireshark分析tcp/ip报文之报文头
  5. 航旅事业群面试(li)
  6. python模块补充
  7. cplex安装_Excel软件规划求解工具的安装与功能介绍
  8. 前端开发 字体样式的演练0229
  9. [计算机网络] - TCP半连接队列和全连接队列
  10. 国内专业移动广告聚合平台,KeyMob,手机广告效果最棒
  11. objective-c宏定义
  12. .NET 高性能WEB架构-比较容易改造方式 - .NET架构
  13. 上班摸鱼打卡模拟器微信小程序源码
  14. java if 终止_java中跳出或终止if语句的方法
  15. 笔记本开启WiFi共享后无法联网
  16. 对反游戏外挂技术的思考及实现
  17. STM32G0系列的启动配置与程序下载说明
  18. C++ 求幂函数pow()的输出问题
  19. 数论概论笔记(二)勾股数组
  20. 基于视觉的车辆防碰撞系统

热门文章

  1. 纤亿通带你认识和正确使用SFP光模块
  2. c语言综合项目实践 结构体及应用,C51单片机应用与C语言程序设计(第3版) 基于机器人工程对象的项目实践简介,目录书摘...
  3. 鼠标移到图片上图片放大
  4. 周华健机器人演唱会_周华健伦敦花旦演唱会:歌声悠悠流过梦一样人生
  5. 算法的复杂度度量--时间复杂度以及空间复杂度
  6. redis-trib.rb 搭建集群
  7. SQL分组排序和排序函数(rank、dense_rank、row_number)
  8. 三角函数π/2转化_高中诱导公式全集,有了它,三角函数公式一网打尽
  9. 对话 NuCypher:如何安全地存储、共享和管理链上私人数据
  10. 大于一千的最小质数c语言,c语言找出大于m的最小素数