Java编程入门指南

发表时间: 2023-11-20 15:17

计算机基础

01

前言

学习Java之前,我想问一个问题,你们觉得有没有必要学习计算机基础?

初识编程,刚开始很多人觉得没有必要看这些枯燥无味的基础知识,不如直接从“HelloWorld”开始,先接触程序,让代码编译运行起来,才渐渐的去深入学习程序的语法,框架的结构等;后续使用类似于Spring框架去整合程序、搭建项目。

我并不是否定这样的学习方式,因为:

每个同学的体质不一样

,这种方式对于自制力强,学习能力高的人来说比较适用,尤其是想要快速入门和着急找工作的同学,要学会如何去使用它,至于底层涉及到的原理,可慢慢深入了解,毕竟:入行成为一名资深程序员可是一辈子的事情。

但对于大对数0基础开始学习的同学,我个人依旧是建议从计算机基础小知识点开始逐步深入,熟悉编程思想,了解底层逻辑,这样对以后学习将非常有帮助。

初步认识计算机

接下来,让我们花费几分钟的时间来简单了解下计算机的一些基础知识。


02


一:机器语言的分类

机器语言

机器语言是什么?

机器语言是一种用于编程计算机的低级语言,它直接与计算机硬件进行交互。机器语言是计算机能够理解和执行的最基本形式的指令集。它以二进制代码的形式表示,每个指令由一串数字组成,用于指示计算机在内部执行的特定操作。例如下面就是一串简单的机器码:

010100100000 // 520

那么就会有人问,为什么机器码是0和1组成的?


机器码(Machine Code)是计算机能够直接理解和执行的指令集,它使用0和1组成的二进制编码进行表示。这是因为计算机内部的电路和存储器是由许多开关组成的,这些开关只有两个状态:打开和关闭,即表示为0和1。



汇编语言

汇编语言是什么?

汇编语言是一种与机器语言密切相关的低级程序设计语言。它使用助记符(Mnemonic)和符号标识,使程序员能够更容易地编写和阅读与机器指令直接对应的程序。


汇编语言的语法相对简单,通常由标签(Label)、指令(Instruction)和操作数组成。标签是程序中的一个位置,用于标识特定的指令或数据。指令是具体的机器指令助记符,表示要执行的操作,而操作数提供了指令所需的数据或地址。它与机器语言的区别在于指令的表示方法上,汇编语言的主体是汇编指令,相比于机器指令,编程人员更容易记住。

MOV AX,1234H  //汇编指令: 寄存器AX的内容送到1234H中101110000011010000010010 //机器指令



高级语言

高级语言是什么?

常见的高级编程语言包括C、C++、Java、Python、PHP、JavaScript等。每种高级语言都有自己的语法和语义规则,以及适用于不同应用领域的特性和库。开发人员可以使用高级语言编写应用程序、网站、算法、游戏和各种软件等。


高级语言通常更易学习和使用,同时提供了更高程度的抽象和功能,使开发人员能够更快速、更高效地编写复杂的程序。列举不同语言的输出:

printf("hello world!");     //C语言
println("hello world!");    //Java
print("hello world!");      //Python
cout<<"hello world!"<<endl; //C++

高级语言的编写的程序需要经过编译器或解释器的处理,将其转换为机器码或者执行解释执行,以便计算机能够理解和执行。这种中间步骤使得高级语言程序在不同的平台上可以保持可移植性,并且能够更方便地进行调试和修改。


提供了更高级的抽象和功能,简化了程序员的编程工作,并提高了代码的可读性、可维护性和可重用性。通过使用编译器或解释器,高级语言程序可以被转换为机器码或解释执行,以便计算机能够理解和执行。


03


二:进制

初识进制,推荐同学们使用在线工具进行进制转换:

https://tool.oschina.net/hexconvert/

二进制


二进制是一种表示数字、文本和数据的计算机编码系统。它是一种基于2个数字的系统,这两个数字是0和1,也被称为位(bit)。在二进制系统中,每个位(bit)代表一个二进制数字,它可以是0或1。

二进制是计算机内部的基本表示形式,计算机中的所有数据都以二进制形式存储和处理。在计算机内部,一连串的二进制位可以表示数字、字符、图像、音频或任何其他形式的数据。

二进制的基数是2,所以每位的权值是2的幂。二进制数字从右到左,每一位的权值依次为1、2、4、8、16、32等等,依次类推。例如,二进制数 1010 表示 1(2^3) + 0(2^2) + 1(2^1) + 0(2^0),等于10。

八进制

由1到7组成的数字串,数字最大不会超过7,逢八进一,例如 157(表示十进制数字111)

十进制

日常使用的数字都是十进制类型的,逢十进一,例如 0123456789。


十六进制

由1到9,a-f(或者是A-F,分别代表10-15)组成的数字串,数字最大不会超过15,其中字母是不区分大小写的,逢十六进一,例如0F83(表示十进制数3971)


进制转换:

  1. K进制与十进制数的转换:

  2. 假设有一个n+1位的K进制数,它的形式如下:
  3. AnAn-1…A3A2A1A0
    则它的大小为:(也就是对应的我们能看懂的十进制数为):
A0 * K^0 + A1 * K^1....+ An * K^n      //K^n表示K的n次方

二进制数:10101 转换成 十进制数为:21

 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1+1*2^0 = 21

2.十进制与k进制的转换:

举个栗子:

用十进制数21一直除以2,每次得到的余数倒数就是最后的二进制数10101。同样,十进制转八进制、十进制转十六进制都是一样的套路,非常简单。


3. 二进制与八进制和十六进制之间的转换:

8是2的3次方,16是2的4次方,所以这之间的转换存在一种快捷方法。以2转8示例,将2进制从低位到高位,每3个一组,如果是十六进制就每4个一组,高位不足3位的补0,然后将每组依次转换成对应的十进制,得到的结果就是对应的8进制或者16进制。

二进制10101100101转八进制:2545

二进制10101100101转十六进制:565


04


三:原码、反码、补码

在计算机中,最小的单位是位,也称为比特(bit)。而另一个常用单位是字节,一个字节是8位,也就是8比特,所以我们常用的二进制表示法是8位。


接下来我们一一解答:

原码(Sign-Magnitude):

原码是最直观和简单的表示符号的方法。在原码表示中,用最高位表示符号位,0表示正数,1表示负数,其余位表示数值的绝对值。例如,+5的8位原码是:00000101,-5的8位原码是:10000101。


原码的优点是表示符号直观简单,但它的缺点是在进行负数的运算时不方便,因为需要对正负数的运算分别处理。


举个栗子:

0000 0001   // 表示 11000 0001   // 表示 -1

反码(One’s Complement):

不知道大家有没有注意到原码的一个问题,那就是负数参与计算的时候,比如

出现了一个大问题,就是1 + (-1) 不等于0,而等于 -2。


为了解决原码运算的问题,反码表示方法被引入。在反码中,正数的反码与其原码相同,负数的表示方式为将该数的原码除符号位外的各位取反。例如,+5的8位反码是:00000101,-5的8位反码是:11111010。


原码转反码的规则为:正数的反码为其本身,负数的反码是符号位不变,其他位取反。取反的规则就是如果是0就变成1,如果是1就变成0。

那么将转成反码的计算:

得到的结果是1111 1111。


哎?等等......这不对啊,有同学会问:老师这怎么不是0?


别急,这只是反码的计算结果,将反码转成原码 1111 1111 —> 1000 0000,得到 -0, 也就是0,完全符合预期的结果,也解决了原码的计算问题。但是没有解决0和-0的关系。


这时候要引申出补码辣!!!


同学:尊嘟假嘟?

我:听我给您一一道来

补码(Two’s Complement):

反码解决了负数计算的问题,但又有新的问题出现了,那就是 -0 和 0。为了解决反码表示中0的问题,补码表示方法被引入。在补码中,正数的补码与其原码相同,负数的表示方式为将该数的反码加1。


例如,+5的8位补码是:00000101,-5的8位补码是:11111011。

举个栗子:


原码:0000 0001 , 补码:0000 0001
原码:1000 0001 , 补码:1111 1111


咱们看图说话:


利用补码计算我们得到了 0 (而不是 -0 ),解决了少一个数字的问题。


在补码中,规定了0的表示为0000 0000,而1000 0000表示的为-128。


注意事项:

原码、反码和补码之间的关系:

  • 一个数的反码是将其原码的除符号位外的各位取反得到的。
  • 一个数的补码是将其反码加1得到的。
  • 一个数的原码是根据补码得到的,如果补码的符号位为1,则表示为负数,将补码除符号位外的各位取反得到原码。
  • 通过这种转换关系,可以在不同的表示方式之间进行相互转换。在计算机中,大多数情况下使用补码来表示带符号整数,因为它具有运算方面的优势,并避免了0的两个表示形式的困扰。


若您喜欢这篇文章,欢迎转载分享,非常感谢您的阅读,我将保持初心,持续输出更加实用精彩的文章。



希望大家可以多多关注我哦!