学习疯狂JAVA讲义——运算符与位运算符

笔记备忘,方便以后忘了查询(如有错误,敬请指点)

★变量:

    - 变量的定义、赋值(简单值、表达式)

    -8个基本类型:

byte、short、int、long、float、double、char、boolean

★运算符

    ▲算数运算符(7个):

    +  、  -  、  *  、  /  、  %

    ++:将单个变量的值加1

         放在变量之后:表示先用变量的值,再自加

         放在变量之前:表示先自加,再用变量的值

    --:将单个变量的值减1

         放在变量之后:表示先用变量的值,再自减

         放在变量之前:表示先自减,再用变量的值 

    复杂的数学运算,用Math类。该类提供了一些工具方法,可以完成初中、高中数学运算

    public static void main(String[] args) 
    {
        //计算乘方
        System.out.println(Math.pow(3,8));
        
        //计算开方
        System.out.println(Math.sqrt(25));
        
        System.out.println(Math.asin(1));
        
        //四舍五入取整
        System.out.println(Math.round(4.5));
        //向上取整
        System.out.println(Math.ceil(-4.5));
        
        //向下取整
        System.out.println(Math.floor(4.5));

▲赋值运算符:

    将 = 右边的值,装入左边的容器(变量)

    左边只能是变量 = 右边可以是任何复杂的表达式

    大部分时候   = 右边往往都是复杂的表达式

double db = 3.5;
		                     //4                 -            1.5
		int i = (int)(Math.round(db) - Math.floor(db) / 2
			+ Math.sin(1.57));
		            //  +  1   =3
		System.out.println(i);

▲比较运算符:

    >

    >=

    <

    <=

    ==

    !=

    比较运算符,正是用于比较两个变量或两个值,如果符合预期得到true

    否则得到false

▲逻辑运算符:

    只能对boolean值进行运算

     && 与:要求两个条件同时为true,结果才为true。

    &   不短路与

    | | 或:要求任意一个条件为true,结果就为true。

    |    不短路或

    ! 非:条件为true,就变成false;原来条件为false,就变成true

    ^异或:两个条件相同得到false;两个条件不同得到true

                 (true-true)(false-false)   (true-false)(false-true)

&&和&的区别:

    &&:如果第一个操作数已经false,将不会计算第二个数,称为短路

    &:如果第一个操作数已经false,仍然会计算第二个数,称为不短路

||和|的区别:

    ||:如果第一个操作数已经true,将不会计算第二个数,称为短路

    |:如果第一个操作数已经true,仍然会计算第二个数,称为不短路

一般来说,编程时都是用【短路与】和【短路或】

▲拓展的赋值运算符:

  a += b;     a =(类型)( a + b)

  拓展的赋值运算符的左边,只能是变量

  a -= b;     a =(类型)( a - b)

  a *= b;     a =(类型)( a * b)

  …

  基本上,前面介绍的双目运算符都可以与=结合,形成扩展的赋值运算符

▲三目运算符

  逻辑表达式?值1 :值2

  如果 逻辑表达式为true,整个表达式返回值1,否则返回值2

  类型 变量 = 表达式 ? "" : "";

嵌套后的三目运算符表达式可能返回3个、甚至更多的值的其中之一

▲运算符的结合性和优先级:

  结合性:控制运算符的运算方向:从左到右?还是从右到左?

                大部分运算符都是从左到右,=运算符是从右到左的。

  优先级:谁先算、谁后算的问题

                先乘除、再加减 ——推荐,记不清的时候,用括号保证优先级。

▲位运算符:

    它只能对整形(byte、short、int、long、char)运算

    针对二进制码进行运算的

▲正数直接算出来叫原码。

原码的最高位又叫符号位,如果是0代表正数;最高位是1代表负数。

反码:除符号位外,其他的都按位取反

补码:反码+1

▲负数的二进制码,保存的是补码

		/*
1000 0000 0000 0000 0000 0000 0010 1101   -45的原码
1111 1111 1111 1111 1111 1111 1101 0010   -45的反码  取反
1111 1111 1111 1111 1111 1111 1101 0011   -45的补码  +1
	
1111 1111 1111 1111 1111 1111 1011 0010   -78的补码
&
--------------------------------------------------------
1111 1111 1111 1111 1111 1111 1001 0010    补码   
1111 1111 1111 1111 1111 1111 1001 0001    反码   -1
1000 0000 0000 0000 0000 0000 0110 1110    原码   取反
		*/
		System.out.println(-45 & -78);

       

&:按位与。上下两位都是1时,得到的结果才是1

|:按位或。上下两位有一个是1时,得到的结果就是1

        当表示状态时,会用特定的数表示开关。 

    文本状态:  粗体   斜体    下划线   中划线

                          1        2         4            8

                      0001  0010    0100       1000

           粗体、斜体   00000011    =1 | 2

           粗体、斜体、中划线     00001011=1 l 2 | 8

    left | up   在安卓中这是两个"开关"能把东西放在左上角

~:非,按位取反。原来是0变成1;原来1变成0;(包括符号位)

       正变负,加1    负变正,减1

^:按位异或。上下两位相同时是0,不同是1

		/*
0000 0000 0000 0000 0000 0000 0011 1000   56的原码
	
0000 0000 0000 0000 0000 0000 0101 1001   89的原码
^
--------------------------------------------------------
0000 0000 0000 0000 0000 0000 0110 0001    答案是97
		*/
		System.out.println(56 ^ 89);

<<:左移N位,相当于乘以2的N次方

 【面试题】2乘以8,最快的算法——2<<3

		/*
0000 0000 0000 0000 0000 0000 0011 0110   54
                    左移3位,乘以2的3次方
0000 0000 0000 0000 0000 0001 1011 0000   432
		*/			
		System.out.println(54<<3);

>>:右移N位,相当于除以2的N次方

        除不尽的话,实际结果总是比除的结果略小的整数

		/*
0000 0000 0000 0000 0000 0000 0010 0010   32
               右移3位,除以2的3次方
	除不尽的话,实际结果总是比除的结果略小的整数
0000 0000 0000 0000 0000 0000 0000 0100   4
		*/			
		System.out.println(34>>3);

>>>:无符号右移 ——很少用

    如果被移位的数是正数,那么该运算符与>>运算一样。

    如果被移位的数是负数,被空出来的高位总是补0——这个数就会变成正数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值