《Java 7程序设计入门经典》一1.1 计算基础

简介: 本节书摘来自华章出版社《Java 7程序设计入门经典》一书中的第1章,第1.1节,作者(美)Herbert Schildt Dale Skrien,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.1 计算基础

考虑到你正在修一门编程课程,你可能已经对计算科学的基础知识有了一定的了解。但是,不是所有人都有同样的知识,或某些知识可能是不准确的。为此,在介绍Java语言之前,先介绍计算科学中的一些核心概念。在这个过程中,本章会定义一些关键术语。

1.1.1 计算机的硬件组成

由于计算机最终会运行编写的程序,因此了解计算机各部分运行的基本方式是有帮助的。任意一台计算机都由一系列的部件组成,它们协同运作,形成一个计算机整体。尽管计算机组成的部件随着时间推移不断演进,但是计算机仍有许多共同的关键特性。例如,一个台式计算机包含的基本元素在智能手机中也能找到。
为了有效工作,一台计算机至少包括要有以下组成部分:
中央处理器(CPU)
内存
输入/输出设备
下面逐一进行介绍。
CPU提供了计算机基本的计算能力。它通过执行组成程序的指令实现计算。所有的CPU都能识别某一种特定的指令集(instruction set)。指令集定义了CPU能够执行的操作种类。例如,许多CPU支持的指令有:基本算术运算、从内存中载入和存储数据、进行逻辑比较、改变程序流等。另外,为了访问内存,许多CPU包括有限数量的寄存器(register),为数据提供快速的短期存储。
CPU执行的指令称为机器指令(machine instruction)或机器码(machine code)。一个机器指令能执行的运算很少。例如,一个指令也许只能把一个寄存器的值移动到另一个寄存器上,或把一个值从寄存器移动到内存中,或对两个寄存器的值进行比较。一般情况下,一类CPU的指令集与其他类型的CPU的指令集并不相同。所以,为一类CPU设计的指令集通常不能用于另一类CPU上。有时存在一些CPU系列,它们保持后向兼容性,但无关的CPU的指令集通常不同。
机器指令通常不易于人类阅读。它们具有为方便计算机使用而编码的形式。但是,有可能用助记符来表示这些指令,使机器指令适于人类阅读。这种形式称为汇编语言(assembly language)。例如,将数据从一个地方移动到另一个地方的指令可以用助记符表示为MOV,比较两个值的指令可以记为CMP。将汇编语言转换为计算能执行的形式的程序称为汇编程序(assembler)。但是,像Java这样的语言通常是一种更好的选择,所以当今很少有人编写汇编语言。
计算机内存用于存储指令和数据,其中指令是用机器指令的形式存储的。内存主要用于在程序执行的过程中保存信息。它并不用于长期存储。计算机中的内存是可寻址的(addressable),即CPU可以通过给定地址来访问内存中的某一特定位置。内存常常又称为RAM,它是随机存储器(Random Access Memory)的缩写。
当CPU执行程序时,它先从内存中获得指令,然后执行指令指定的操作。接着,它在获得下一条指令,执行它,循环往复。在默认情况下,指令从内存中顺序读取。但是,有些指令能够改变执行流,跳转到一个不同的内存区域。
现在,人们使用着各种各样的输入/输出(I/O)设备,包括键盘、显示器、鼠标、触摸屏、语音输入和声音输出等。它们事实上有着同样的功能,它们使计算机能够收发信息。输入/输出设备常常用于使人们能同计算机交互。但是还有一些输入/输出设备是计算机用于与其他设备通信的,比如存储设备、网络适配器和像机器人似的控制接口。
除了以上描述的几种关键部件外,许多计算机还有存储设备,例如硬盘、DVD和闪存。许多计算机还能联网,连接到Internet或局域网。为了使计算机能够联网,计算机需要网络适配器。

1.1.2 位、字节和二进制

当今,几乎没有人没听说过位(bit)、字节(byte)和二进制(binary)。这些词汇已经成为人们的日常用语。由于它们是计算领域中非常基础的概念,因此正规地定义它们非常重要。
1)二进制计数系统
在最底层,计算机使用0和1工作,所以它需要基于0和1的计数系统。这个计数系统称为二进制计数系统。二进制计数系统就如我们通常使用的十进制计数系统一样工作,除了每个数位的权重不同。你也许已经知道,在十进制中,每从右往左移动一位,其表示的值的个数总比上一位表示的值的个数大十倍。于是,十进制数基于10的幂次:最右边的数位表示1的个数,其左边一位表示10的个数,然后是100的个数,等等。例如,数423表示四百二十三,因为其中有4个100,2个10和3个1。
二进制有着相同的工作原理,只是每从右往左移动一位,其表示的值的个数增加为上一位的2倍。于是,第一个二进制位(指最右边的位)表示1的个数,往左一位表示2的个数,然后是4的个数,8的个数,等等。这意味着,一个二进制的前8位表示以下数值:
128 64 32 16 8 4 2 1
例如,二进制数1010就是十进制数10。其原因是,二进制数1010有0个1,1个2,0个4,1个8。所以,0+2+0+8等于10。再来看一个例子:二进制数1101就是十进制数13,因为它有1个1,0个2,1个4和1个8,所以1+0+4+8等于13。正如你所见到的,如果要把二进制数转化为十进制数,只需要把1所在的数位表示的值相加即可。
2)位和字节
在计算机中,位可以用来表示一个二进制数位。一个位可以置位,也可以复位。置位的位是1,复位的位是0。位可以进行分组。一种最常见的形式是字节。通常认为一个字节含有8个位。这意味着字节可以表示0~255之间的数值。
另外,还有一种组织形式称为字(word)。通常认为,一个字的大小与特定的CPU架构兼容。例如,32位计算机上每个字有32位,即4个字节。
为了方便,二进制数常常每4个一组(有时每8个一组)进行分组,例如:1011 1001。这使得数字更加容易阅读和理解。但是,这样的分组对其表示的数值没有任何影响。

1.1.3 操作系统

计算机的硬件部件由操作系统(operating system)管理和访问。操作系统是一个控制计算机的主程序。操作系统是计算机科学的核心研究内容之一,在这里不可能详细介绍。幸运的是,只需要一点简单的概述知识就够我们使用了。
操作系统主要有两大功能。首先,它提供底层功能,使其他程序能够使用计算机的资源。例如,可以通过使用操作系统提供的服务,将信息保存在硬盘上。其次,操作系统能够控制其他程序的运行。例如,它为其他运行的程序提供内存空间、为其运行调度CPU时间,监控其资源使用状况。
有许多常见的操作系统,如:Windows、UNIX、Linux、Mac OS、iOS和Android。一般来说,程序在设计时必须运行于一个特定的操作系统。例如,以Windows为运行平台的程序不能在UNIX操作系统上运行,除非该程序经过特别的移植。
image

相关文章
|
23天前
|
机器学习/深度学习 Java 编译器
解锁硬件潜能:Java向量化计算,性能飙升W倍!
编译优化中的机器相关优化主要包括指令选择、寄存器分配、窥孔优化等,发生在编译后端,需考虑目标平台的指令集、寄存器、SIMD支持等硬件特性。向量化计算利用SIMD技术,实现数据级并行,大幅提升性能,尤其适用于图像处理、机器学习等领域。Java通过自动向量化和显式向量API(JDK 22标准)支持该技术。
62 4
|
2月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
182 14
|
7月前
|
Java
Java计算时间差
这段代码提供了两个方法来计算时间差。`timeDistance` 方法接收两个 `Date` 对象,计算并返回两者之间的天数、小时数和分钟数差异,格式为“X天Y小时Z分钟”。`hourDistance` 方法则接收两个时间字符串,解析后计算并返回两者之间相差的小时数(向上取整)。
284 4
|
9月前
|
存储 Java
java中的常见运算符的计算方式
本文介绍了计算机中二进制数的原码、反码和补码的概念及其转换方式。原码是符号位加真值的绝对值;反码中正数不变,负数其余位取反;补码在反码基础上加1。文章还详细解释了Java中的常见运算符(如按位与、或、异或、移位等)如何基于二进制进行计算,并探讨了使用补码的原因,包括统一符号位处理和扩展表示范围。通过具体代码示例帮助理解这些概念。
155 6
java中的常见运算符的计算方式
|
9月前
|
存储 JavaScript Java
如何在Java中计算绝对值
绝对值表示一个数离0的距离,总是非负的。在Java中,可以通过`Math.abs()`函数或`if-else`条件语句来计算绝对值。使用`Math.abs()`可直接将负数转为正数,而`if-else`则根据条件判断是否取反。本文介绍了这两种方法的具体实现步骤和代码示例,并展示了如何通过用户输入获取数值并输出其绝对值。此外,还提供了完整的代码和编译执行的方法。
337 6
如何在Java中计算绝对值
|
11月前
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
319 63
|
11月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
286 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
10月前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
357 2
|
10月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
安全 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版)

热门文章

最新文章