带妹来青岛了!
大家好,我是二哥呀!
五一的时候,带老婆、女儿、妹妹去了张家界和凤凰古城。这次端午节,我们一起来到了青岛。我妹说,要不是她这个哥哥带她出去看世界,她去过最远的地方除了三门峡市就是洛阳市了。
其实大学毕业去苏州之前,我去过的城市也仅有三门峡、平顶山、洛阳和郑州。直到现在,还不曾看到过海!
所以这次,来青岛的目的只有一个,就是看海。本来可以去连云港的,更近一些,不过心里更向往青岛一些,就多坐了两三个小时的车程。
洛阳是个三线城市,所以到青岛的飞机只有固定的几趟,昨天就没有班次,所以这次我们坐的动车。昨天中午 3 点多启程,到青岛已经晚上 10 点半了!
下了火车发现,10 点半的青岛竟然被浓雾笼罩着,能见度很低,这要是坐飞机,估计没法降落,还得打道回府。
洛阳这个时候已经热的一笔,气温逼近 40 度,青岛这里却冷的一笔。出车站后,旁边经过几个穿得不是很保暖的小姐姐,嘴里都在骂娘,冻得直哆嗦。
哈哈哈,不愧是沿海城市啊。
本来打算利用 7 个多小时的车程写一篇文章,回答一篇知乎的,结果看我妹在玩王者荣耀,没忍住,打了好些把!由于火车上信号差,所以我玩的是三对三的人机模式,结果我妹说我是“游戏黑洞”!这还不算,我老婆还在旁边补刀:“别玩了吧,看把你菜的!”
害,二哥当年可是玩过 Dota 的男人!
嗯,当时也菜得抠脚!好像在一个对战平台的分就没上过一千,常年处于新手的水平,队友直呼带不动。
这次玩王者也是一样,四五把匹配模式中,有三局是对方投降了。我不明所以,我妹说,“估计是你太菜了,对方不想和你玩!”
侮辱性极高,伤害性极强!
没办法,只好看书了!“书中自有黄金屋,书中自有颜如玉”,只好在书中寻找点快乐啦。这次带的是一本《程序是怎样跑起来的》。
本书在封皮上写了三句话:
本书适合菜鸟程序员入门阶段; 本书适合中级程序员查漏补缺; 本书适合高手程序员向家人普及计算机知识。
哼,一二条都不适合我——王者荣耀都菜得抠脚了,这里必须得找回点场子。火车上我只看了前两章,我把我认为重要的知识点给大家梳理一下。
第一章,对程序员来说 CPU 是什么
从物理结构上说,CPU 就是中央处理器,相当于计算机的大脑,内部由数以亿计的 IC(集成电路)组成。
从功能层面来说,CPU 由寄存器、控制器、运算器和时钟组成。寄存器用来暂存指令,处理数据;控制器负责把内存上的指令、数据读入寄存器,并根据指令的执行结果来控制整个计算机;运算器负责运算从内存读入寄存器的数据;时钟负责发出时钟信号,时钟信号的频率越高,CPU 的运算速度越快!
拿 Java 语言中的 System.out.println("Hello World");
这条语句来说,System.out.println
就是指令,Hello World
就是数据。不过,Java 是一门高级的编程语言,它最终会被编译解释为机器语言。
说到 CPU 就必须提一嘴内存,通常所说的内存指的是计算机的主存储器,负责存储程序和数据等,使用 DRAM(动态随机存取存储器)作为芯片,可以对任何地址的数据进行读写操作,但断电后内容会自动清除。
CPU 中的寄存器按照功能可以分为多种,包括:
程序计数器,决定程序执行的流程。 标志寄存器,存储运算处理后的 CPU 状态,第一个字节位、第二个字节位、第三个字节位的值为 1 时,分别表示运算结果为正数、零和负数。 累加寄存器,存储执行运算的数据和运算后的数据。 基址寄存器,存储数据在内存中的起始地址。 变址寄存器,存储基址寄存器的相对地址。 通用寄存器,存储任意数据。
虽然像 Java 这类的高级编程语言可以写出功能无比强大、业务无比复杂的程序,但最终都会被转换为 CPU 可处理的简单指令:
数据转送指令,数据在 CPU、内存、外围设备之间的读写操作; 运算指令,用累加寄存器执行算数运算、逻辑运算和位移运算; 跳转指令,实现条件分支、循环等; call/return 指令,方法的调用/返回方法调用前的地址
第二章,数据是用二进制数表示的
不管是 CPU 还是内存,都是由集成电路组成的,而集成电路就像是一条黑色蜈蚣(女生不要怕哈,形象生动的比喻而已)。
这些集成电路,都有很多引脚,但这些引脚只有两个状态,就是直流电压的 0V 和 5V,这也就决定了计算机的信息处理只能用二进制来处理。
二进制数有 8 位的、16 位的、32 位的、64 位的,但都是 8 的倍数,这是因为计算机所能处理的信息的基本单位是 8 位的二进制数,也就是一个字节。
程序中,即使是用十进制数和文字等表述的信息,最终都会转成二进制数。比如十进制的 39,用二进制数来表示就是 00100111
,比如字母 A,用二进制数表示就是 01000001
。
二进制和十进制之间是怎么转化的呢?
其实很简单,就是将二进制数的各位的值与位权相乘后相加就可以了,还拿 39 和 00100111
来说。
0*2^7=0 0*2^6=0 1*2^5=32 0*2^4=0 0*2^3=0 1*2^2=4 1*2^1=2 1*2^0=1
2^7
就表示 2 的 7 次方(幂),以此类推,加起来后就是 39。对于十进制 39 来说,其实也可以拆分:
3*10^1=30 9*10^0=9
加起来就是 39。只不过,十进制以 10 为基数,二进制以 2 为基数。
第二章里还有关于位移运算、补数、逻辑右移、算数右移、逻辑运算等这些重要的知识,就留到以后再和大家讲吧。因为我要吃饭了,吃完饭要去看大海了~哈哈
我是二哥呀,一个还没有见过海的 old man~
哼,别笑,我还没见过沙漠和草原呢~
(逃