Skip to content

Java-A-2019/lab2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lab 2

上次课程我们学习了数学上的基本运算(+, -, *, /, %)。

本次课程我们将更深入的了解 Java 中常用的其他运算符;

此外,我们还需要学会站在巨人的肩膀上,调用现成的库实现我们的需求

获取及提交 lab

获取:通过 https://github.com/Java-A-2019/lab2,获取。

提交:将提交物放到自己 lab2 的文件夹中,将文件夹压缩,压缩文件名应为你的 学号_姓名 (如1630201002_毛浩楠),提交至 FTP 站点(ftp://10.132.141.33)本课程文件夹的 work_upload/lab2 文件夹下。

提交物:本次lab只需提交 lab2_3.java

截止时间:2019年10月7日 23:59:59

part0: 学会查询 Java API

从 FTP 课程文件夹的 LAB/lab2 中下载 api.zip ,解压后打开 index.html ,即可开始查询 Java 中常用的一些 api。下面让我们开始尝试查一些数学相关的 api。

在 Java 中,一些基本的数学函数都在 java.lang.Math 这个类中,如:对数函数 log、余弦函数 cos、正弦函数 sin、四舍五入 round、平方根 sqrt 等等。

  1. 在最上方的导航栏里选择“索引” url

  2. 在下面的字母表中选择 M

  3. 在M开头的关键字中选择 Math

  4. 学习 Math 中的方法及常用的常量 url

tips: 实际编程的过程中,我们肯定会遇到许多问题。善于查文档,用好 Google,这些技能都非常有用 : D

part1: 神奇的自增 (++)

1. 在 `Github` 上获取 `lab2_1.java`
2. 在本地运行该程序,思考每个输出语句结束后 `x` 的值是多少

part2: 逻辑运算符 (!, &&, ||)

1. 在 `Github` 上获取 `lab2_2.java`
2. 在本地运行该程序,思考 `&&` 与 `||` 短路的含义    

part3: 运用 Math 库验证数学定理

19sser 这个学期正在上一门有趣的高等数学课 : )

这天,小A正在做书上的一道习题,需要证明

url

小A很快完成了证明。而作为软件工程专业的一名学生,小A忽然想用实际运算验证一下这个算式。请你帮忙完成lab2_3.java 中未完成的部分。

  1. 你需要用到 Math 这个类中的 pow 方法,快使用你查询 API 的技能看看 pow 方法是怎么用的吧
  2. 这个问题中等式的右边是我们常见的数学常数 e,而 Math 类中已经定义了许多常量来表示这些常数,如 用 Math.PI 可以表示圆周率,而 Math.E 就是我们需要用到的常数e
  3. 当程序运行结果显示 Congratulations! You have finished the equation verification. 时,即成功完成。 思考:
  • 程序中n的值可能需要你们自行调整,请调整到合适的值
  • 验证成功的条件 Math.abs(right - left) < 1e-2 是什么意思

Bonus: 位运算符

注意: Bonus 不一定需要提交,也不一定需要浪费你现在宝贵的时间瞥它一眼。毕竟,未来你总会掌握的~

如果你已完成以上的三道难题,恭喜你,此刻的你已经达到了历届大佬当初的水平

或许你应该休息一下,整理代码,准备提交 lab2 了。

如果你已经看到这里并且觉得兴奋又津津有味,那么本助教认为你获得了深入理解计算机系统的资格。

因此,本助教贴心的留下这个 Bonus,帮助你尝试一窥计算机的本质。    

学习计算机上的位运算符,它们功能强大又令人疑惑,但是它们是如此的可爱,以至于我们必须要掌握它们 ; )
它们是:
1. &
2. |
3. ^
4. ~
5. >>
6. <<

这次的 Bonus,我们先简单进行一次位运算的入门

一切的起源:二进制

位:二进制位,简称“位”。是二进制记数系统中表示小于 2 的整数的符号,一般用 1 或 0 表示,是具有相等概率的两种状态中的一种。二进制位的位数可表示一个机器字的字长,一个二进制位包含的信息量称为一比特(bit)。

例子:

int 占 4 个字节(byte)    
1byte = 8bit
换算下来,一个 int 类型即占 32 bit

int i = 88; 
这里的88为十进制,
转换为二进制为:1011000,
使用完整的32位表示即为:00000000 00000000 00000000 01011000

什么是位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如,& 运算本来是一个逻辑运算符,但整数与整数之间也可以进行 & 运算。

举个例子,6 的二进制是 110,11 的二进制是 1011,那么 6 & 11 的结果就是 2,它是二进制对应位进行逻辑运算的结果(0 表示 false,1 表示 true,空位都当 0 处理)。

6:  0110
11: 1011
&   ----
2:  0010

位运算符的基本运算

定义 A = 8 (1000), B = 8 (1001)

  1. &:按位与,如果相对应位都是 1,则结果为 1,否则为 0

     A & B = 8 (1000)
    
  2. |:按位或,如果相对应位都是 0,则结果为 0,否则为 1

     A | B = 9 (1001)
    
  3. ^:按位异或,如果相对应位值相同,则结果为 0,否则为 1

     A ^ B = 1 (0001)
    
  4. ~:按位取反,按位取反运算符翻转操作数的每一位,即 0 变成 1,1 变成 0

     ~A = 7 (0111)
    
  5. <<: 左移,按位左移运算符。左操作数按位左移右操作数指定的位数

     A << 2 = 32 (10 0000)
    
  6. >>:右移,按位右移运算符。左操作数按位右移右操作数指定的位数

     A >> 2 = 2 (0010)
    

位运算的简单应用:给定一个整数,请写一个函数判断该整数的奇偶性

如果不使用位运算的方法,我们完全可以使用下面的方式解决:

public static boolean isOdd(int num) { // odd 奇数
    return num % 2 != 0;
}

那么如何使用位运算实现呢?

请下载 lab2_bonus.java 并补充其中缺失的部分。

tips: 一个数是偶数那么最后一位一定是 0 如果一个数是奇数那么最后一位一定是 1

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages