zoukankan      html  css  js  c++  java
  • 动手动脑

    一:运行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位)
    结论:由基本到复杂。
  • 相关阅读:
    STL源码剖析之_allocate函数
    PAT 1018. Public Bike Management
    PAT 1016. Phone Bills
    PAT 1012. The Best Rank
    PAT 1014. Waiting in Line
    PAT 1026. Table Tennis
    PAT 1017. Queueing at Bank
    STL源码剖析之list的sort函数实现
    吃到鸡蛋好吃,看看是哪只母鸡下的蛋:好用的Sqlite3
    cJSON
  • 原文地址:https://www.cnblogs.com/zhangzhongkun/p/9753572.html
Copyright © 2011-2022 走看看