zoukankan      html  css  js  c++  java
  • 【Java】- 运算符详解

    java运算符:
      定义:用来指明对于操作数的运算方式
      按照操作数数目分类:
        单目运算    数目运算    三目运算
        a++              a+b           (a>b) ? x:y
      按照运算符功能分类:
        算术运算符:
          +    -    *    /    %(取余/取模)
          ++ 自增
          --  自减
          注:int x = 1; int y = x++ 将x变量空间的内容先取出,然后将常量区的1取出x在像做
               值交换的时候会产生一个临时的副本空间,++(--)在变量前面则先自增后备份,++(--)在
                变量后面则先备份后自增,=号是将备份空间中的值赋值给别人
          例:
            int m =1;
            int n =2;
            int sum = m++ + ++n - n-- - --m +  n-- - --m ;
            System.out.println("m="+m+", n="+n+", sum="+sum);
            m =0 n =1 sum = 2
          赋值运算符:
            = 赋值号
            +=  int x=1 x+=10 ; 相当于 x = x+10   // 11
            -=  int x=10 x-=10 ; 相当于 x = x-10   // 0
            *=  int x=10 x*=10 ; 相当于 x = x*10  // 100
            /=  int x=10 x-=10 ; 相当于 x = x/10   // 1
            %=  int x=10 x%=10 ; 相当于 x = x%10 // 0
            注:
              byte a = 1;
              a +=1; //2
              a = a+1;//编译报错
              a = (byte)(a+2) // 强制转换,通过
                  讲解:计算机中+=相当于一个运算符,会先用+符号自动的将byte提升为32bit的int类型
                来进行计算,然后在通过=运算符将32bit位的int类型自动降为8bit的数据来存入a
                中,但是a=a+1中的=和+属于两个运算符,+将byte中的1提升为32bit来个常量池
                中的1进行相加,但是=赋值时在将32bit位的数据赋值到8bit位中的a空间中,会出
                现编译报错
              总结:
                单个运算符后台编译可以自动提升或者降低bit位来满足赋值或者计算,但是赋值
                号之后不能自动降级方程式,需要强制转换
        位运算符:
          &按位与 | 按位或 ^ 按位异或 ~ 按位取反
          <<按位左位移   >>按位右位移   >>>按位又位移(无符号)
            例: 3 & 5 = ?    3 | 5 = ?    3 ^ 5 = ?    ~ 6 = ?
              解:  将3 和 5分别换算成二进制
                3 = 00000000  00000000  00000000  00000011 = 011
                5 = 00000000  00000000  00000000  00000101 = 101
                所以按位&即将011和101进行按位&后在化成10进制(true 为 1 false 为 0)
                      0  1  1
                      1  0  1
                      0  0  1  = 1
                所以按位 | 即将011和101进行按位 | 后在化成10进制(true 为 1 false 为 0)
                      0  1  1
                      1  0  1
                      1  1  1  = 7
                所以按位 ^ 即将011和101进行按位^后在化成10进制(true 为 1 false 为 0)
                      0  1  1
                      1  0  1
                      1  1  0  = 6
                所以按位  即将101进行按位 ~ 后在化成10进制(true 为 1 false 为 0)
                ~6 = -7
                解释:计算机将0划分在正数行列,所以 -1<-->0  -2 <--->1  -3<--->2 故 -7<-->6
                6  (正数三码相同)
                00000000 00000000 00000000 0110  (原码)
                00000000 00000000 00000000 0110  (反码)
                00000000 00000000 00000000 0110  (补码)
                -6  (负数三码不同)
                10000000 00000000 00000000 00000110  (原码)
                11111111 11111111 11111111 11111001  (反码:保持符号不动其余取反)
                11111111 11111111 11111111 11111010  (补码:在反码基础上+1)
                计算机中不管是整数还是负数,存储的形式都是以补码形式来存储
                注:反码是一种表示形式 取反是一个计算过程
              <<按位左位移:
                6<<1=?
                  00000110 = 00001100 = 12
                  所以往左移相当于*2的位移次幂
                6>>1=?
                  00000110 = 00000011 = 3
                  所以往左移相当于/2的位移次幂
                负数
                -6 >>>1
                  11111111    11111111    11111111    11111010(以补码计算)
                  ?1111111    11111111    11111111    11111101
                  注: >> 保留符号位1填1
                        >>> 不保留符号 不管是什么都填0
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    Android 中adb 命令(实用)
    Mac安装Scala
    使用阿里云镜像maven管理配置开发环境
    Nginx学习笔记3--Nginx和PHP(fastCGI)的配置和优化
    《实战Nginx》读书笔记--Nginx配置文件
    《实战Nginx》读书笔记
    PHP解码unicode编码中文字符代码
    yii学习笔记--使用gii快速创建控制器和模型
    yii学习笔记--配置文件的配置
    yii学习笔记--快速创建一个项目
  • 原文地址:https://www.cnblogs.com/tar8087/p/11938666.html
Copyright © 2011-2022 走看看