zoukankan      html  css  js  c++  java
  • Java(三)

    Java基础(二)

    整数运算

    Java的整数运算遵循四则运算的规则

    两个整数相除,只能得到整数部分; eg: int x = 45/2;  //27

    求余运算使用%;  eg: int y = 45%2; //1

    整数的除法对于除数为0时,编译不会报错,运行会报错

    溢出

    整数计算超出范围限制,就会产生溢出,溢出时不会报错,但是会有奇怪的结果

    解决int溢出的问题,可以把类型定义为long

    简写运算法:+=,-=,*=,/=

    自增、自减

    ++n:表示先+1再引用n;

    n++:表示先引用n,再+1;

    移位运算

    左移 <<:不断的✖️2

    右移 >>:不断的➗2

    无符号右移运算 >>>:右移后高位总是补0,因此负数右移后会变成一个正数

    对byte和short进行移位时,会先转成int

    位运算

    与、或、非、异或的运算

    与运算的规则:两个数同时为1,结果为1

    a = 0&0;//0

    a = 0&1;//0

    a =1&0;//0

    a =1&1;//1

    或运算规则:一个数为1,结果为1

    a = 0&0;//0

    a = 0&1;//1

    a =1&0;//1

    a =1&1;//1

    非运算规则:0和1互换

     a = ~0;//1

    a = ~1;//0

    异或运算规则:两个数不同,结果为1,两个数相同结果为0

    a = 0&0;//0

    a = 0&1;//1

    a =1&0;//1

    a =1&1;//0

    对正数进行位运算,先转化为二进制,位数不足的用0补齐,然后按位对齐,依次对每一位进行运算

    eg:a = 167776589 ==> 00001010 00000000 00010001 01001101     ==>10.0.17.77

     b = 167776512 ==>  00001010 00000000 00010001 00000000   ===>10.0.17.0

    a&b = 167776512==>  00001010 00000000 00010001 00000000       通过与运算,可以判断一个Ip是否在给定的网段内

    运算优先级

    • ()
    • !~++--
    • */%
    • +-
    • <<>>>>>
    • &
    • |
    • +=-=*=/=

    类型自动改提升与强转

    int i =12345;

    short s = (short) i;  把int型的i强制转化为short,大范围强制转为小范围的整型时,可能会报错

    public class Test {
        /**
         * 计算前n个自然数的和
         * ((1+N)*N)/2
         */
        public static void main (String[] args){
           int n = 10000;
           int s = ((1+n)*n)/2;
           System.out.println("前n个自然数的和:"+s);
           System.out.println(s == 50005000 ? "测试通过":"测试失败");
        }
    }

    浮点数运算

    浮点数只能进行四则运算;

    浮点数无法精确表示;

    浮点数的比较方法:判断两个浮点数之差的绝对值是否小于一个很小的数(eg:0.00001

    类型提升

    如果计算的两个数,其中一个是整型,那么整型会自动提升到浮点型

    溢出

    整数运算在除数为0时编译不会报错,运行会报错,在浮点数运算时,不会报错,但是会返回异常值

    double d1 = 0.0/0;//NaN   Not a Number

    double d1 = 1.0/0;//Infinity  表示无穷大

    double d1 = -1.0/0;//-Infinity 表示负无穷大

    强制转型

    浮点数强转为整型时,小数部分会被舍弃,如果转出来的大于整型的取值范围,会给出整型的最大值;如果要对小数部分进行四舍五入,需要加上0.5,再强转

    eg:double d = 2.6;

      int n = (int)(d+0.5);

    public class Test {
    
        /**
         * 计算一元二次方程的两个解:ax^2+bx+c = 0
         *
         */
        public static void main (String[] args){
            double a = 1.0;
            double b = 3.0;
            double c = -4.0;
            double result1 = (-b+Math.sqrt(Math.pow(b,2)-4*a*c))/(2*a);
            double result2 = (-b-Math.sqrt(Math.pow(b,2)-4*a*c))/(2*a);
            System.out.println("result1的值为:"+result1);
            System.out.println("result2的值为:"+result2);
            System.out.println(result1 == 1 && result2 == -4 ? "测试通过":"测试失败");
        }
    }

    布尔运算

    布尔只有true和false

    比较运算符:>,>=,<,<=,==,!=;  与运算符:&&;  或运算符:| |;   非运算符:! ;

    关系运算符的优先级:!大于>,>=,<,<= 大于==,!= 大于 && 大于 | | 

    短路运算

    短路运算是布尔运算重要的一个特点。如果一个布尔运算的表达式能提确定结果,则后续的的计算不执行 ,因为false &&  xx的结果始终是false

    public class Tesr {
        public static void main(String[] args) {
            boolean b = 5 < 3;
            boolean result = b && (5 / 0 > 0);
            System.out.println(result);
        }
    }

    如果没有短路运算,该程序执行的时候会因为&&后面的除数为0而报错,但是由于短路运算的存在,程序执行的结果为false

    三元运算符

    b ? x : y   :根据第一个布尔表达式的结果,分别返回后续两个表达式之一的计算结果

    先算b,如果b为true,则只计算x,否则只计算y

    public class Test {
            /**
             * 判断年龄是否是小学生(6~12岁)
             */
        public static void main (String[] args){
            int age = 22;
            boolean isPrimaryStudent = age >6 && age < 12;
            System.out.append(isPrimaryStudent ? "yes":"NO");
        }
    }

  • 相关阅读:
    【WEBI专题】解决在交叉表中计算占比、偏差、率的问题
    前导零的问题(增加/删除)
    在SAP BW中使用ABAP
    如何组织维度
    BEx Query Designer中的变量及其增强
    《魔幻手机》经典台词摘录
    今天发现了VISTA系统的一个BUG
    Online Tools And Sofrware Directory Entry
    [转载]博客园通过Word 2007发布随笔
    为你的程序增加记忆功能
  • 原文地址:https://www.cnblogs.com/xiaoxiaorichang/p/14482168.html
Copyright © 2011-2022 走看看