首页 > 其他分享 >2023年11月8日

2023年11月8日

时间:2023-12-21 09:24:03浏览次数:29  
标签:11 0001 System 2023 println 字节 原码 out

阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。
解答:
1. 原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如:如果是8位二进制:

[+1]原= 0000 0001

[-1]原= 1000 0001

第一位是符号位,因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式。

2. 反码

反码的表示方法是:

正数的反码是其本身;

负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

[+1] = [0000 0001]原= [0000 0001]反

[-1] = [1000 0001]原= [1111 1110]反

可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。

3. 补码

补码的表示方法是:

正数的补码就是其本身;

负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)

[+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补

[-1] = [1000 0001]原= [1111 1110]反= [1111 1111]补

对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码再计算其数值。

 

Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。

同名变量的屏蔽原则:每个变量都有一个有效区域,即定义的那片区域,出了这个区域,变量将不再有效。(全局变量除外)

举例:

package test;

public class Test {
private static int value= 1;
public static void main(String[] args) {
int value= 2;
System.out.println(value);
}

 

输出结果为2

 

 看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

 

 byte:    1字节 -128~127
short:   2字节 -2^15~2^15-1
int :      4字节 -2^31~2^31-1
long:    8字节 -2^63~2^63-1
boolean:1字节 true false(java中不能以0或非0代替)
float:    4字节 -3.403E38~3.403E38
double:8字节 -1.798E308~- 4.9E324
char:    2字节  ’\u0000‘~‘ ’\uffff ‘(16进制的,换算过来即0~65535)

自动类型转换是安全的,强制类型转换时,可能会引起信息的损失。实线代表无精度损失,虚线代表有精度损失,一般来说在实线两端都是由低精度指向高精度的类型,所占的位数从低到高,范围从小到大,所以可得出,低精度向高精度转化不丢失精度,反之,从高精度传向低精度则会损失。

 

请运行以下代码(TestDouble.java),你看到了什么样的输出,意外吗?

import java.util.Scanner;
 
public class TestDouble {
 
    public static void main(String args[]) {
 
        System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
 
        System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
 
        System.out.println("4.015 * 100 = " + (4.015 * 100));
 
        System.out.println("123.3 / 100 = " + (123.3 / 100));
 
    }
 
}

结果截屏如下:

 

解答:意外,使用double类型的数值进行计算,结果是不精确的。

 

为什么double类型的数值进行运算得不到“数学上精确”的结果?
解答:Double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差,简单地说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来,而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

 

以下代码的输出结果是什么?为什么会有这样的输出结果?

int X=100;
        int Y=200;
        System.out.println("X+Y="+X+Y);
        System.out.println(X+Y+"=X+Y");

结果截屏如下:

 

在System.out.println()中,如果在string字符串后面是+和变量,会把变量转换成string类型,加号起连接作用,然后把两个字符串连接成一个新的字符串输出;如果先有变量的加减运算再有字符串,那么会从左到右先计算变量的加减,然后再与后面的string结合成一个新的字符串。也就是说加号只有在两个string类型或者其中一个是string类型的时候才起到连接作用,否则仍然是运算符

标签:11,0001,System,2023,println,字节,原码,out
From: https://www.cnblogs.com/Christmas77/p/17918254.html

相关文章

  • 2023年10月22日
    早上起床后,感觉有点疲劳,于是决定给自己放松的一天。下午,我和一些朋友一起去篮球场打篮球。打篮球不仅可以锻炼身体,还可以放松心情,释放压力。我们组织了几场友谊赛,不仅锻炼了身体,还增进了彼此之间的友谊。晚上回到宿舍后,我选择了玩一会儿游戏,选择的游戏是最近非常火爆的《原神》。......
  • 2023年10月25日
    上午的课程是UML的序列图和协作图。在这门课上,我们学习了UML建模语言中的序列图和协作图,这是一种图形化的表示方法,用于描述对象间的交互和协作过程。通过老师的讲解和实践练习,我对序列图和协作图的概念和绘制规则有了更深入的理解。这种图形化的表达方式对于我们软件工程师来说非......
  • 2023年10月30日
    Java中常见运行时异常异常类型说明ArithmeticException算术错误异常,如以零做除数ArraylndexOutOfBoundException数组索引越界ArrayStoreException向类型不兼容的数组元素赋值ClassCastException类型转换异常IllegalArgumentException使用非法实参调用方法lIIegalStateExcept......
  • 2023年11月2日
    今天我们实现学生的前端信息,学生部分的前端代码,学生部分的后端代码在User的后端代码中register.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>学生注册</title><style>button{......
  • 大二打卡(11.16)
    今天做了什么:今天的高铁票,老姐要结婚了,迫不及待穿上周一买的那身巨帅的大衣,但是大衣已经被表姐拿回去了,前几天看到老姨他们拍的视频,家门口已经大变样了,喜庆,红艳,但是距离我亲眼目睹这一切还剩四次课,uml,体育课,数据结构跟离散数学,uml今天开始上实验,每周都是,这周的只是让你下载个建模......
  • 2023年10月20日
    二叉树的链式结构二叉树的数据结构:typedefstructNode{chardata;structNode*lchild,*rchild;}*Bitree,BiNode;分别为根,左孩子,右孩子二叉树的创建,先序遍历的方式如输入 “AB#CD###E#F##”voidcreatBitree(Bitree&T){charch;cin>>ch;if(ch=='#')T=NULL;else{T=newBi......
  • 11/13
    又是周一,上午是工程实训,下午是建民老师的课.还是servlet会执行doGet()方法其生命周期由容器来管理,分为4个阶段:1、加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象;非默认情况下,可以通过@WebServlet(urlPatterns="/demo",loadOnStartup=1)进行Servlet......
  • 2023年10月21日
    《代码大全2》是一个经典的软件开发书籍,是一本非常有价值的资源,包含了许多软件开发中的重要主题。书中提醒读者以解决问题为导向,不仅仅是完成任务。防御式编程,防御式编程不是指不让别人批评代码,而是指确保要承担的责任,保证方法不会因为传入错误数据而破坏,看似微小的防范,收益可能......
  • 2023-2024-120231329《计算机基础与程序设计》第13周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html这个作业的目标《C语言程序设计》第12章并完成云班课测试作业正文https://www.cnblogs.com/xjn123/p/17......
  • 2023-2024 20231313《计算机基础与程序设计》第十三周学习总结
    2023-202420231313《计算机基础与程序设计》第十二周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第十三周学习总结作业内容《C语言程序设计》第12章并完成云班课测试作业正文我的作业目录教材总结总结学习过程的问题《C语言程序......