学习疯狂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));
学习疯狂JAVA讲义——运算符与位运算符_第1张图片

 

▲赋值运算符:

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

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

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

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);

▲位运算符:

    它只能对整形(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

学习疯狂JAVA讲义——运算符与位运算符_第2张图片

^:按位异或。上下两位相同时是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——这个数就会变成正数

你可能感兴趣的:(学习,java,开发语言)