计算机底层说到底是一堆电路,一个电路只有2种状态:通和不通。N个电路就可以有2^N次个状态的组合,它们排列组合成一个序列。
这个序列被人设的,按照规则进行了解释。
一堆无序的排列组合需要赋予人类世界的意义,所以确立了二进制到符号(字符、数字)的规则。
符号是被认为携带意义的感知。
意义就是一个符号可以被另外的符号解释的潜力。符号之间解释的链,即可达到信息交换的目的。

我们学习就是要理解这种既定的规则。

人类世界沟通和交流用的是语言和符号,不同母语的国家交流需要翻译。计算机与人类传递信息,需要翻译。

主要(目前我的理解深度而言)两大类:

尽管在计算机内部,数字的表象被包含在字符内,也就是字符集中有可以表示数字的字符,但从作用上来说,表象和实质还是有差异。从代码上来看差异:

1
2
3
4
5
int a=124;
string b="124";
char c='124';
//没写过程序的人看到124,认为他们是一个东西。但是在计算内部,却是3种信息。
//代码写的是人,但是传递给计算机处理的时候,负责解释这些字符的是编译器。

理解byte

计算机中一个电子元件的状态是1bit(通或不通),而人设的规定存储信息的最小单元是一个字节即 8 个 bit,即1byte。
这里byte的意义有两种:

它组合是:
00000000-11111111
被解释为10进制的0-256(2^8次方)种变化的信息量。

数的规则

主要围绕着二进制如何被解释为数,或者反向的数如何用二进制来表达。

数分配的存储资源大小

Java中八种基本数据类型:short、int、long、float、double、boolean、byte、char。每种类型都按传统规定了存储在计算机当中占据空间的大小,好比限定了装载这些数的盒子。

byte b; 1字节
short s; 2字节
int i; 4字节
long l; 8字节
float f; 4字节
double d; 8字节
boolean bool; false/true 1字节
char c; 2字节(C语言中是1字节)
为什么要这么做呢?这是一个很有意思的问题,根本上说还是在于计算机资源是有限的。人设的规定数据范围和大小,是为了限定申请资源方对计算机资源占用过多,或者说是为了让计算机“物尽其用”,合适的大小在性能上也有一定差异。所以出现的溢出(通俗的说是给装载数的壳子被数给撑爆了),未考虑到场景下的数的大小。
计算机资源是有限的,所以无法表征无理数及无限循环小数,只能在精度范围内取近似值。

数的范围

数的范围是排列组合的范围。
分有符号和无符号,有符号的首位做符号位。
无符号范围:0 –(2的N次方)-1
有符号范围:负的(2的N-1次方)到(2的N-1次方)-1

如short

字的规则

涉及到编码。网上文章很多,比如计算机编码总结
也可以看看这篇:彻底弄懂uinicode编码

计算机内的信息流转

最终处理的都是二进制的信号;
为了方便计算机和人类信息传递,出现了不同层次的语言(一系列规则):