Java基础之计算机基础知识引出Java

简介: 计算机基础知识概览:探讨计算机科学的约定性,指出其底层基于二进制逻辑运算,由晶体管开关控制。二进制与十进制间的转换是基础,计算机通过ASCII编码处理英文字符,但不包含汉字。早期计算机发展始于西方,从巴贝奇的差分机到图灵机,再到冯·诺伊曼结构。Unicode标准解决多语言字符编码,如UTF-8和UTF-16。编程语言分为低级(如汇编)和高级(如Java),以适应不同需求。

计算机基础知识
1.我认为计算机是一门伪科学,为啥这么说呢?
我认为科学应该是一种对人、物、自然、宇宙等现象,进行观察、研究、实验、论证后摸索出一种规律、结果、定论的系统体系和方法论,包含了过程和结果。
但是计算机没啥可观察研究的,一切都是约定好的。我感觉和老祖宗留下的阴阳之道差不多: 从无‘0’开始数,道就是无,‘0’生一(‘1’),一生二(‘10’‘11’),二生三(‘100’‘101’‘110’‘111’),三生万物(‘1000’...无穷)。计算机最底层只有‘0’和‘1’两个标识组成,这两个标识组成固定的序列,用序列代表字母数字等值,我们来关注字母数字,计算机来使用标识进行逻辑运算。所以计算机只是一个约定好的工具,能快速得出运算结果的工具。至于怎么运算的,其实计算机内部是无数个晶体管组成的数字电路。每一个晶体管都是一个开关,可以控制电流的流动,晶体管打开时表示为‘1’,关闭时候表示为‘0’。注意这里的‘1’和‘0’并不是数字,而只是一个标识。
2.将与晶体管1-开和0-关对应的二进制1和0转换为十进制表示
计算机使用的正是二进制(binary)数制,这是一种基数为2的数制,它只有两个数字:0和1,因为它可以对应上述的数字电路中的标识。数字满2就进一位,这样就可以使用0向无穷进位的值来充当唯一序列,代表固定的字母和值。
但是我九年义务教育学到使用的是十进制0到9来计算,二进制和十进制是两种不同的数值表示法,只是进位规则不一样而已。二进制是从右往左数
它两可以来回转换:
十进制转二进制:将十进制数除以2,记录下每次除法的余数。然后将商继续除以2,再次记录余数。这个过程一直重复,直到商为0。将所有的余数从下到上写出来,得到的序列就是对应的二进制数。
二进制转十进制:将二进制数从右到左的每一位乘以2的相应幂次方(从0开始),然后将所有的乘积相加。得到的结果就是对应的十进制数。
其实这些转换知道就行,反正它是固定的,我们来看一下前十个的对应关系,以下是二进制数从0开始的前几个数:
0 (二进制) = 0 (十进制)
1 (二进制) = 1 (十进制)
10 (二进制) = 2 (十进制)
11 (二进制) = 3 (十进制)
100 (二进制) = 4 (十进制)
101 (二进制) = 5 (十进制)
110 (二进制) = 6 (十进制)
111 (二进制) = 7 (十进制)
1000 (二进制) = 8 (十进制)
1001 (二进制) = 9 (十进制)
1010 (二进制) = 10 (十进制)
1011 (二进制) = 11 (十进制)
1100 (二进制) = 12 (十进制)
好吧,来算一下吧: 二进制1100其对应的十进制值可以通过将每个位上的数乘以2的相应幂次然后相加得到。从右到左,每一位的权重分别是2的0次方、2的1次方、2的2次方、2的3次方,以此类推:
1 2^3 + 1 2^2 + 0 2^1 + 0 2^0 = 8 + 4 + 0 + 0 = 12(十进制)
注意,因为计算机存储一般是按照字节(Byte)来存储的,一个字节包含8位(bit),较小的二进制数转换为字节时,通常会在数的末尾添加足够的0,使其成为8位的整数。当然由此类推,如果二进制数是超出了8位的话,存储就会变成两个字节。比如‘110010111’从右到左数依次从低位到高位,最高位是最左边,也就是‘11001011’占第一个字节,最低位是‘1’占第二个字节存储,记得填充满8位,那就是‘00000001’。
这里的高低位是字节的知识,在多字节数据类型中,最高位就是它的第一位,最低位就是它的最后一位,通过高低位来决定字节显示的顺序,这个不是固定从高到低啥的,不同的系统和语言会使用不同的字节顺序,从低到高叫小端字节序,从高到低位叫大端字节序。
这时,我们就将二进制转换成了熟悉的十进制来表示,并且将它们存储到了计算机字节中,也就是说计算机已经认识了十进制数字了,比如我输入2,它就在底层默念:00000010。
3.十进制与编码定义
面对这些二进制序列看的很头疼,可是面对上面转换的十进制我们已经很熟悉了,但是计算机不能只是数字呀,还得有字母,我们就可以使用编码规则来与计算机进行约定,常见的编码方式包括ASCII、UTF-8等。
先说ASCII
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)
基于英文字母表定义的一个字符编码标准,ASCII码表使用7位二进制数来表示128个不同的字符,包括:大写和小写英文字母(A-Z和a-z)、数字(0-9)、标点符号和数学符号、控制字符(如换行、回车、制表等)、一些特殊字符(如美元符号、百分号等)。
既然只有128个,我们全列出来:
十进制 ASCII字符 二进制
0 NUL 00000000
1 SOH 00000001
2 STX 00000010
3 ETX 00000011
4 EOT 00000100
5 ENQ 00000101
6 ACK 00000110
7 BEL 00000111
8 BS 00001000
9 HT 00001001
10 LF 00001010
11 VT 00001011
12 FF 00001100
13 CR 00001101
14 SO 00001110
15 SI 00001111
16 DLE 00010000
17 DC1 00010001
18 DC2 00010010
19 DC3 00010011
20 DC4 00010100
21 NAK 00010101
22 SYN 00010110
23 ETB 00010111
24 CAN 00011000
25 EM 00011001
26 SUB 00011010
27 ESC 00011011
28 FS 00011100
29 GS 00011101
30 RS 00011110
31 US 00011111
32 SPACE 00100000
33 ! 00100001
34 " 00100010
35 # 00100011
36 $ 00100100
37 % 00100101
38 & 00100110
39 ' 00100111
40 ( 00101000
41 ) 00101001
42 * 00101010
43 + 00101011
44 , 00101100
45 - 00101101
46 . 00101110
47 / 00101111
48 0 00110000
49 1 00110001
50 2 00110010
51 3 00110011
52 4 00110100
53 5 00110101
54 6 00110110
55 7 00110111
56 8 00111000
57 9 00111001
58 : 00111010
59 ; 00111011
60 < 00111100
61 = 00111101
62 > 00111110
63 ? 00111111
64 @ 00100000
65 A 00100001
66 B 00100010
67 C 00100011
68 D 00100100
69 E 00100101
70 F 00100110
71 G 00100111
72 H 00101000
73 I 00101001
74 J 00101010
75 K 00101011
76 L 00101100
77 M 00101101
78 N 00101110
79 O 00101111
80 P 00110000
81 Q 00110001
82 R 00110010
83 S 00110011
84 T 00110100
85 U 00110101
86 V 00110110
87 W 00110111
88 X 00111000
89 Y 00111001
90 Z 00111010
91 [ 00111011
92 \ 00111100
93 ] 00111101
94 ^ 00111110
95 _ 00111111
96 ` 00100000
97 a 00100001
98 b 00100010
99 c 00100011
100 d 00100100
101 e 00100101
102 f 00100110
103 g 00100111
104 h 00101000
105 i 00101001
106 j 00101010
107 k 00101011
108 l 00101100
109 m 00101101
110 n 00101110
111 o 00101111
112 p 00110000
113 q 00110001
114 r 00110010
115 s 00110011
116 t 00110100
117 u 00110101
118 v 00110110
119 w 00110111
120 x 00111000
121 y 00111001
122 z 00111010
123 { 00111011
124 | 00111100
125 } 00111101
126 ~ 00111110
127 DEL 00111111
128 NUL 00000000
哈哈,好多呀。
根据上面的ASCII编码表,我们就能告诉计算机字母或者符号是哪个了,比如我说‘a’,计算机就知道是‘97’,然后它就知道二进制是‘00100001’,对应到数字电路晶体管就是‘闭闭开闭闭闭闭开’。
看到这里,你会不会想一个问题,为啥ASCII编码中只有这些英文字母啊?怎么没有汉字呢?因为计算机是老外发明的,老外不写汉字!!!
4.计算机历史
说到这里就不得不感叹下大清勿我三百年呐,要知道在古代我国的数学造诣那是相当超前的,但是却在我大天朝闭关锁国期间老外就发明了计算机。
19世纪的英国数学家和发明家:查尔斯·巴贝奇(Charles Babbage)被认为是“计算机之父”。
因为他设计了一种叫做“差分机”的机械装置,用于计算多项式函数,后来他又在1822年设计了更复杂的“分析机”,这是第一台概念上的通用计算机。
我们呢,1822年是清政府道光皇帝统治的年代。女人裹足,大门不出,二门不迈,相夫教子,不问世事,女子无才便是德,还在封建皇朝统治下。
20世纪30年代英国数学家和逻辑学家-艾伦·图灵(Alan Turing)提出了图灵机的概念,理论上能够模拟任何计算过程。图灵机是现代计算机科学的基础。
20世纪40年代约翰·冯·诺伊曼确定计算机的结构采用存储程序以及二进制编码等,所以后来对主要特征是:指令与数据都以二进制形式储存在存储器里;指令根据其储存的顺序执行的机器称为冯·诺伊曼机。
1941年德国工程师和计算机科学家-康拉德·楚泽(Konrad Zuse)构建了Z3,这是第一台功能性的程序控制的计算机。
1946年2月14日由美国军方定制的世界上第一台电子计算机‘埃尼阿克’“电子数字积分计算机”(ENIACElectronicNumericalAndCalculator)由约翰·普雷斯珀·埃克特(J. Presper Eckert)和约翰·威廉·莫奇利(John William Mauchly在美国宾夕法尼亚大学问世。它标志着现代计算机的诞生,是计算机发展史上的里程碑。而可怜我大天朝才刚赶跑了小日本并解放了全中国,不过也幸好我们中华人民共和国成立,中国人民从此站起来了,先辈万岁!
1956年,晶体管在计算机中使用,导致了第二代计算机的产生。这些计算机体积小、速度快、功耗低、性能更稳定。
1958年发明了集成电路,使计算机变得更小、功耗更低、速度更快。到了80年代,超大规模集成电路在芯片上容纳了几十万个元件,使得计算机的体积和价格不断下降,而功能和可靠性不断增强。
基于半导体的发展,1972年第一部真正的个人计算机诞生了。
现在量子计算机是未来电脑的发展方向,它遵循量子力学规律进行高速数学和逻辑运算、存储及处理量子信息。量子计算机的算力对传统计算机将是指数级的提升。
老外有了计算机作为工具,帮助各行各业开始飞速发展!
5.Unicode标准与其他编码规则
世界上有很多的国家,用不同的字符,他们也要使用计算机,那ASCII编码就不够用了呀,怎么办呢?Unicode标准来了。
Unicode标准是一个由国际标准化组织(ISO)和国际电工委员会(IEC)共同制定的字符编码标准,旨在为所有现代文字和符号提供一个唯一的编码。
Unicode标准定义了一个称为“Unicode”的字符集,它包含了世界上几乎所有已知语言和文化中的字符。定期更新最新字符进来,这样就可以实现全球化了!
当然也要兼容ASCII呀,所以ASCII 字符(十进制0-127)在 Unicode 中具有相同的编码,所以‘a’还是‘97’哈。
Unicode标准定义了字符集,也定义了多种编码格式,如UTF-8、UTF-16、GBK(用于简体中文字符的编码方式)、GB2312等。
UTF-16是一种固定长度的编码方式,它总是使用 2 个字节来表示一个字符,除非是代理对,此时会使用 4 个字节。通常用于内部处理;
UTF-8是一种变长度的编码方式,可以根据字符的 Unicode 码点使用不同数量的字节进行编码。通常用于网络传输和文件存储。
Unicode 码点(code point)是用来唯一标识 Unicode 字符的数值,这个数值是十进制的。Unicode 码点从 U+0000(十六进制)到 U+10FFFF(十六进制),共有 1,114,112 个不同的码点。好吧,又把十进制转成了十六进制来表示,反正我是记不住。
将十进制数转换为十六进制数的过程称为十六进制表示。这个过程可以通过以下步骤完成:
分组:将十进制数从右到左每四位一组进行分组。如果数字小于四位,可以在前面添加零直到它成为四位数。
转换:对于每一组四位数,将其转换为对应的十六进制数。十六进制数使用0-9和A-F(大写或小写)来表示。
0-9的十进制数直接对应到十六进制数。
10-15的十进制数对应到十六进制数A-F。
组合:将转换后的十六进制数按照从左到右的顺序组合起来,得到最终的十六进制数。
例如,将十进制数1234转换为十六进制数:
分组:1234已经是四位数,所以不需要分组。
转换:1234(十进制)= 302(十六进制),因为1234除以16等于76余18,所以十六进制数是302。
组合:组合后的十六进制数是302。
也就是说一个Unicode码点对应一个十进制数字,只不过因为字符的编码都是两个字节,就转换成了十六进制显示,比如“我爱你”在UTF-8编码中,三个字对应的十六进制和十进制编码如下:
“我”字的UTF-8编码: 十六进制:E4 BD A0 十进制:228 189 160
“爱”字的UTF-8编码: 十六进制:E5 A5 BD 十进制:229 165 189
“你”字的UTF-8编码: 十六进制:E4 BD A5 十进制:228 189 165
这个也不用记,了解即可,需要换算直接使用工具就行。
总之,有了Unicode字符集和编码方式标准,现在我们就可以直接使用字符来告诉计算机了。
6.低级语言和高级语言
了解了上述的知识,我们就准备开始编程了,编程就是你要告诉计算机要做些什么的过程,告诉计算机的过程就要使用语言,语言分为低级和高级语言。
低级语言通常指的是汇编语言和机器语言,就是直接与机器语言(二进制代码)相对应,相当于人使用计算机的语言进行沟通,不用再使用编码方式翻译成二进制,直接与计算机硬件交互,执行效率高,但编写和维护难度大。
高级语言就是使用相对人类友好的沟通方式来与计算机交互。拥有更接近人类自然语言的语法和结构,所以开发效率高,但是需要翻译为计算机的语言才能执行,执行效率相对较低。而且因为它有一个翻译的过程,针对不同计算机的系统,高级语言一次写好后,只要支持翻译的计算机系统都可以运行。
Java就是一门高级语言,越低级的语言人越看不懂,当然也就最牛。

目录
相关文章
|
2月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
67 2
|
3月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
3月前
|
Java
【Java基础面试四】、介绍一下Java的数据类型
这篇文章介绍了Java的数据类型,包括8种基本数据类型(整数、浮点、字符、布尔)和3类引用数据类型(数组、类、接口),并提供了基本数据类型所占内存空间和数据范围的详细信息。
|
18天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
432 37
|
1月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
21 1
|
1月前
|
Oracle Java 关系型数据库
|
1月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
62 2
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
缓存 安全 Java
【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)
Java的特点和优点,、Java 8的新特性、面向对象、基本数据类型和引用类型、自动拆装箱与自动装箱、==与equals()的区别、为什么重写equals()就要重写hashcode()、抽象类和接口的区别、重载和重写的区别、四种引用方式、wt()和sleep()的区别、java方法是值传递还是引用传递?访问修饰符、static、final、this和super、volatile的用法及原理
【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)
下一篇
无影云桌面