• 动手动脑


    一:运行EnumTest.java事例

               1.引用同一枚举类型名中枚举表中的不同常量,引用的并不是一个对象,

               2.每个具体值都引用一个特定的对象,相同的值则引用同一个对象。

               3.枚举是可以从字符串中转换。

               4.可以使用“==”和equals()方法直接比对枚举变量的值

    枚举类型的基本用法:

               枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。

               用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。

               枚举类型的定义格式为:enum   <枚举类型名>   {<枚举表>};    

    二:运行TestDouble.java事例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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));
        }
    }

    结果:

    结论:

    这个涉及到二进制与十进制的转换问题。
    N进制可以理解为:数值×基数的幂
    double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

    举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。

    简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

    如果涉及到精确数字,更适合用字符串而不是double类型,必要时我们要选取string类型的字符串类型来计算更加精确的结果。

    三:以下代码的输出结果是什么?

                      int X=100;

                      int Y=200;

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

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

          为什么会有这样的输出结果?

    输出结果如下:

    X+Y=100200

    300=X+Y

     System.out.println("X+Y="+X+Y);//字符型输出,先输出x(100),再输出y(200)

    System.out.println(X+Y+"=X+Y");//先进行求和,遇到string类型后按照string类型输出

    Java中的加号有时是连接符,有时是运算符:

    1.当左右两边连接的都是非数字型时,则为连接符。

    2.当一边是数值类型,另一边是非数值类型时,则为连接符。

    3.当两边都是数值类型时,则为运算符,即相加求和的作用。

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

          原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。

     如单字节的5的原码为:0000 0101;-5的原码为1000 0101。

    反码:正数:正数的反码与原码相同。负数:负数的反码,符号位为“1”,数值部分按位取反。可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算。

      

    如单字节的5的反码为:0000 0101;-5的反码为1111 1010。

    补码:正数的补码就是其本身。负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值。

       

    如单字节的5的补码为:0000 0101;-5的原码为1111 1011。

    示例程序:

    import java.util.Scanner;

    public class ZJF {

           public static void main(String[] args)

           {

                  int a=5;

                  int b=-5;

                   System.out.println(Integer.toBinaryString(a));

                   System.out.println(Integer.toBinaryString(b));

           }

    }

           正数采用原码,负数采用补码。

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

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

    问题六.查看Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

            java中有8种基本数据类型:byte、int、short、long、boolean、char、float、double
    对应的类为:Byte、Int、Short、Long、Boolean、Charecter、Float、Double
    逻辑型:boolean
    文本型:char
    整数型:byte、short、int、long
    浮点型:float、double
    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)
    (1字节等于8位)
    结论:由基本到复杂。
  • 相关阅读:
    Python实战:网络爬虫都能干什么?
    写了个脚本将json换成md
    RAC +MVVM
    Python 基础指令以及库管理工具pipenv
    CocoaPods创建自己的公开库、私有库
    python脚本解析json文件
    iOS 面试题
    路由器 大杂烩
    大数据挖掘基本概念
    Node.js实践
  • 原文地址:https://www.cnblogs.com/zhangzhongkun/p/9753572.html
Copyright © 2020-2023  润新知