zoukankan      html  css  js  c++  java
  • java运算符号

    运算符 用来指明对于操作数的运算方式

    按照操作数的数目来进行分类:

    单目 a++

    双目 a+b

    三目 (a>b)?x:y a>b成立,执行x;a>b不成立,执行y;

    按照运算符的功能来进行分类:

    算术运算:+ - * / %(取余、取模) ++ --(自减);int x = 5;x/2-->2;x%2-->1

    赋值运算:= (赋值符号 将=右边的内容(值 引用)存入=左边的变量空间内)

         += -= *= /= %= (复合型);

      int x = 1;

      x++;//x自增了一个,如何让x增加10个?

      int x = 1;for(int i=1;i<=10;i++){x++;} 或 x += 10;x = x+10;       

    关系运算(比较);> >= < <= != == instanceof(判断对象类型)

      1.=和==的区别;

        =赋值符号,将=后面的内容(值,引用)存入=左边的变量空间内;

        ==比较符号 前后内容是否一致;

      2.比较运算符的最终结果是什么?

        3>2 boolean true false  

      3.作用:一个条件的判定;

    逻辑运算;&(逻辑与,和、并且); |(逻辑或,或者)

         ^(逻辑异或,前后不一致则为true); !(逻辑非,一个条件,将原来结果取反)

          && (短路与); ||(短路或)

      1.逻辑运算前后连接的两个boolean结果;

      2.&&短路与什么情况下才会发生?第一个条件为false时,会发生短路

      3.&&短路的是什么?短路的是&&之后所有计算的过程;

      4.如果发生了短路情况,性能比&稍微好一点;

      5.&和&&的区别?

        &可以视为逻辑运算,可以视为位运算;&&只能当做逻辑运算来用;

        &与&&都当做逻辑运算符来使用的时间区别如下;

        执行的最终结果没有区别;

        第一个条件为false时,&&的性能好一点;

      6.|| 如果当第一个条件为true时,则后面的条件不执行;

    位(bit)运算;

      &按位与; |按位或; ^按位异或;

      ~按位取反; <<按位左位移; >>按位右位移;>>>按位右位移(无符号)

      3&5=?

      1.将3和5转化成二进制表示形式;011,101

      2.竖着按照对应位置进行& | ^计算;(1表示true,0表示false)

      3.将计算后的二进制结果转化为十进制;3&5计算后的001,转化为十进制为1;

        3|5 二进制111 十进制7;3^5 二进制110 十进制6;

      6<<1 =? 12; 

      6<<2 =? 24;

      6>>1 ==? 3

      左位移 相当于乘以2的位移次幂;

      右位移 相当于除以2的位移次幂;

    ===================================================================

    原码 反码 补码 二进制表示数字;

    如,6,正数的原码=反码=补码;

    原码: 00000000 00000000 00000000 00000110

    如,-6,

    原码:10000000 00000000 00000000 00000110

    反码:11111111 11111111 11111111 11111001(符号不动,其它取反)

    补码:11111111 11111111 11111111 11111010(反码+1)

    计算机中不管是正数还是负数,存储的形式都是以补码形式存储;

    反码是一种表示形式,取反是一个计算过程(每一个位置都取反);

    进制转化问题?

     十进制 0 1 2 3 4 5 6 7 8 9

     十进制-->二进制;60除以2取余数,将余数倒序排列,即为有效位;

     00000000 00000000 00000000 00111100;

     二进制-->十进制;从右至左开始计算 每一个元素乘以2的位置(0开始)次幂;

     111100;0*2的0次幂+1*2的2次幂+1*2的3次幂...=4+8+16+32=60

    8进制 01234567

    将三个二进制合并为一个;计算成十进制表示、八进制表示形式以0开头;

    16进制 0123456789ABCDEF

    将四个bit记录为一个小组,16进制表示形式以0X开头;

     

    ====================================================================

    int x = 1;

    int y = x++;先赋值 后自增(这样理解是错的) 算术运算符优先级高于赋值运算(先计算,后赋值);

    x++ 等价于 x=x+1,将x变量空间的内容先取出 常量区取出1 进行计算 ,再次存回x空间

    x在想要做值交换(计算)的时候,会产生一个临时的副本空间(备份)

    ++在变量的前面(++x),先自增后备份; ++在变量的后面(x++),先备份后自增;

    会将副本空间内的值赋给别人;

    int a=1;a=a++;a的结果为1;先备份,后自增,再赋值备份的值;

     

     

     x变量空间的值取出,从常量区取过来2 加法运算 结果重新存回x变量空间内;

    x空间 8bit

    常量区 32bit

    +自动类型提升 8bit ——>32bit;

     强制类型转换后,无问题了;

     

    2.最有效地方法计算2*8的结果;

    00000010 00001000;

    2<<3相当于2乘以2的3次幂;

     乘数刚好是2的次幂;可以采用位移运算;

    2*5 5<<1

    3.两个变量int a=1;int b=2;如何将两个变量的值进行交换;

    方式一、采用一个中间变量空间;好处是容易理解;坏处是产生一个新的内存空间;

    方式二、采用赋值;好处是不产生新的空间;坏处是不易理解;坏处是可能会在+产生值越界;

    a=a+b;//a空间存储的两个元素之和3;b仍是2;

    b=a-b;//a+b-b剩下的是原来的a;此时b是1;a仍是3;

    a=a-b;//a+b-a剩下的是原来的b;此时a是2;b仍然是1;

     

     方式三、

    a=a^b;//1^2 ==>00000001^00000010==>00000011==3

    b=a^b;// a^b^b;3^2==>011^010==>001==1

    a=a^b;//a^b^a;

    用一个数字异或(^)同一个数字两次,值不会改变;

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    ECharts图形库
    python_flask 注册,登陆,退出思路 ---纯个人观点
    python基础-类的继承
    python基础-面向对象
    python基础-大杂烩
    python基础-异常处理
    python基础-文本操作
    python基础-模块
    python基础-函数
    python基础-字典
  • 原文地址:https://www.cnblogs.com/canglongdao/p/12774035.html
Copyright © 2011-2022 走看看