zoukankan      html  css  js  c++  java
  • 2020.9.29(动手动脑)

    枚举

     1 public class EnumTest {
     2     public static void main(String[] args) {
     3         Size s=Size.SMALL;
     4         Size t=Size.LARGE;
     5         //s和t引用同一个对象?
     6         System.out.println(s==t);  //
     7         //是原始数据类型吗?
     8         System.out.println(s.getClass().isPrimitive());
     9         //从字符串中转换
    10         Size u=Size.valueOf("SMALL");
    11         System.out.println(s==u);  //true
    12         //列出它的所有值
    13         for(Size value:Size.values()){
    14             System.out.println(value);
    15         }
    16     }
    17 }
    18  enum Size{SMALL,MEDIUM,LARGE};

    枚举类型对象之间比较可以直接用==;

    枚举可以使用value方法来遍历枚举;

    value of 可以返回带指定名称的指定枚举类型的枚举常量;

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    double类型

    1 public class TestDouble {
    2 
    3     public static void main(String args[]) {
    4         System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
    5         System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
    6         System.out.println("4.015 * 100 = " + (4.015 * 100));
    7         System.out.println("123.3 / 100 = " + (123.3 / 100));
    8     }
    9 }

     double类型的数值计算结果不精确

    原因:

    这个问题涉及到二进制与十进制的转换

    我们知道计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。

    而N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4 = 1×102+2×101+3×100+4×10(-1);其它进制的也是同理,例如二进制数11.01 = 1×21+1×20+0+1×2(-2) = 十进制的3.25。

    Double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

    如果这里不好理解,那我们再举个例子:如要用4bit来表示一个十进制小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,计算机内应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。显然这个区间里面除了我们需要的3.26,还有很多其他的数字。

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

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    1 int X=100;
    2 int Y=200;
    3 System.out.println("X+Y="+X+Y);
    4 System.out.println(X+Y+"=X+Y");

     出现这种结果的原因为:

    用运算符 + 连接字面量“X+Y” 和计算结果 +X 将String 和其它数据类型相加,结果是一个新的String

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    反码 原码 补码

    1. 原码

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

    [+1] = 0000 0001

    [-1] = 1000 0001

    2. 反码

    反码的表示方法是:

    正数的反码是其本身

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

    [+1] = [00000001] = [00000001]

    [-1] = [10000001] = [11111110]

    3. 补码

    补码的表示方法是:

    正数的补码就是其0

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

    [+1] = [00000001] = [00000001] = [00000001]

    [-1] = [10000001] = [11111110] = [11111111]

  • 相关阅读:
    文件处理
    三元运算
    python 第二章 二进制运算、字符编码、数据类型
    python 第一章 基础语法
    刷题-力扣-611. 有效三角形的个数
    刷题-力扣-581. 最短无序连续子数组
    刷题-力扣-LCP 07. 传递信息
    刷题-力扣-1833. 雪糕的最大数量
    刷题-力扣-168. Excel表列名称
    刷题-力扣-337. 打家劫舍 III
  • 原文地址:https://www.cnblogs.com/Nojava/p/13752168.html
Copyright © 2011-2022 走看看