java作业1.2023.9.15
## 典型Java程序开发过程 1. Edit(编辑):书写代码并保存到磁盘上 2. Compile(编译):编译器生成节码 3. Load(装入):类装载器在内存中保存字节码 4. Verify(校验):校验器保证字节码不违反安全规则 5. Execute(执行):解释器将字节码翻译成机器码 ## 反码,源码和补码 反码(One's Complement)、源码(Sign-Magnitude)和补码(Two's Complement)都是用来表示有符号整数的不同方法,它们在表示负数时有一些关键区别: 1. 反码(One's Complement): - 正数的反码与其二进制原码相同。 - 负数的反码是将其二进制原码中的每个位取反(0变为1,1变为0)得到的。 - 反码有两个零表示法,+0和-0。 2. 源码(Sign-Magnitude): - 正数的源码与其二进制原码相同。 - 负数的源码是将其二进制原码中的符号位(最高位)取反,其余位不变。 - 源码也有两个零表示法,+0和-0。 3. 补码(Two's Complement): - 正数的补码与其二进制原码相同。 - 负数的补码是通过将其二进制原码中的每个位取反,然后加1得到的。 - 补码只有一个零表示法,+0。 主要区别: - 反码和源码都有两个零表示法,这使得在进行比较和计算时需要额外的处理。 - 补码只有一个零表示法,这使得它更适合进行数学运算,因为它没有额外的复杂性。 - 在补码中,负数的表示方式与正数相加时不需要特殊处理进位问题,这简化了运算过程。 - 补码是计算机中最常用的有符号整数表示方法,因为它具有数学性质上的优势,并且对硬件实现更为简单。 当我们用不同的表示法来表示同一个整数时,它们的二进制表示会有所不同。以下是一个示例,演示了如何使用反码、源码和补码来表示整数 -5: 1. 反码(One's Complement)表示: - 原码: 101(5 的二进制原码) - 反码: 010(将 101 中的每个位取反) 2. 源码(Sign-Magnitude)表示: - 原码: 101(5 的二进制原码) - 源码: 001(将 101 中的符号位取反,其余位不变) 3. 补码(Two's Complement)表示: - 原码: 101(5 的二进制原码) - 补码: 011(将 101 中的每个位取反,然后加 1) 请注意,正数的反码和源码与其原码相同,而负数的反码和源码在符号位上不同。补码的情况下,正数和负数的二进制表示在位级上不同,但在进行数学运算时,只需将它们当作普通的二进制数相加即可,无需特殊处理进位问题。这是补码表示方法的一个优势。 ## 图形化界面加法 ~~~java package test; import javax.swing.*; public class addTest { public static void main(String[] args) { // 创建一个 JFrame 窗口 JFrame frame = new JFrame("加法计算器"); // 创建两个文本框用于输入数字 JTextField textField1 = new JTextField(10); JTextField textField2 = new JTextField(10); // 创建一个按钮来触发相加操作 JButton addButton = new JButton("相加"); // 创建一个标签用于显示结果 JLabel resultLabel = new JLabel("结果:"); // 创建一个面板来容纳组件 JPanel panel = new JPanel(); // 添加组件到面板 panel.add(new JLabel("第一个数字: ")); panel.add(textField1); panel.add(new JLabel("第二个数字: ")); panel.add(textField2); panel.add(addButton); panel.add(resultLabel); // 添加面板到窗口 frame.add(panel); // 设置窗口属性 frame.setSize(300, 150); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); // 添加按钮点击事件监听器 addButton.addActionListener(e -> { try { // 从文本框中获取输入的数字 double num1 = Double.parseDouble(textField1.getText()); double num2 = Double.parseDouble(textField2.getText()); // 计算结果 double sum = num1 + num2; // 将结果显示在标签中 resultLabel.setText("结果: " + sum); } catch (NumberFormatException ex) { // 处理无效输入 resultLabel.setText("结果: 输入无效"); } }); } } ~~~ ## 就近原则 ~~~java public class Test { private static int value = 1; public static void main(String[] args) { int value = 2; System.out.println(value); //结果为2 } } ~~~ ## 变量间的类型转换 ~~~java //自动类型转换是安全的 //强制类型转换时,可能会引起信息的缺失 ~~~ ## 浮点数的运算与比较 ~~~java //使用浮点数进行运算时,会造成精度的缺失 //可以使用BigDecimal类,精确的计算 ~~~ ## 字符串转化为数字的方法 ~~~java int number = Integer.parseInt(numberString) ~~~ ## 字符串转化为浮点数 ~~~java number1 = Double.parseDouble(firstNumber); ~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?