java study notes (two) operators java

Operators java

运算符 用来指明对于操作数的运算方式
按照操作数的数目来进行分类
单目    双目    三目
 a++    a+b     (a>b)?x:y ;
 
按照运算符的功能来进行分类
算数运算     + - * / % ++ --
赋值运算     = += -= *= /= %=
关系运算(比较)  > >= < <= != ==
逻辑运算     & | ^ ! && ||
位(bit)运算   & | ^ ~ << >> >>>      

Arithmetic

 + - * / %(取余 去模)
 ++(自增) --(自减)
     int x = 1;
     x = x + 1;//x空间内的值 自己增加了一个
     x++; // x空间内的值 自增一个

     ++x; //对于x空间内的值来讲 都是一致 最终的结果都自增了一个

     int x = 1;
     int y = x++; // ++在后 先赋值 后自增(先进行计算 后赋值)

Here Insert Picture Description

     x++; //x = x+1;//将x变量空间的内容先取出 常量区取出1 进行计算 再次存回x空间 
                x在想要做值交换的时候 会产生一个临时的副本空间(备份)
                ++在变量的前面 先自增后备份 ++在变量的后面 先备份后自增
                会将副本的值赋给别人
public class Test {
  public static void main(String[] args){
        int x = 1;
        int y = x++; 
        System.out.println("x  : "+x); //2
        System.out.println("y  : "+y); //1
        
        int xx = 1;
        int yy = ++xx;
        System.out.println("a  : "+a); //2
        System.out.println("b  : "+b); //2
        int a=1;
        a=a++;
        System.out.println("a  : "+a); //1
  }
}

Assignment Operators

= 赋值符号 将=右边的内容(值 引用)存入=左边的变量空间内
+=    -=    *=    /=    %=
int x = 1;
x+=10; //x=x+10;
        
思路:
 x++;//x自增了一个 需求 让x增加10个 for循环结构
 x++; //x=x+10;
 ++          for(int i=1;i<=10; i++){
 x++                      x++;
 x++          }
 ...
        
 int x=1;
 x+=2; //?3 x=x+2;
        
 byte x = 1; //1常量32bit =自动转化
 x+=2;//2 x+2 +自动类型提升 3 =自动转化
 x=(byte)(x+2);// 编译出错 类型从int转化成byte可能有损失 此处=后是表达式 =不确定类型 无法自动转化
 x变量空间的值取出 从常量区取过来2 加法运算 结果重新存回x变量空间内
 x空间---->1    8bit
 常量区--->2    32bit
 00000001   +     00000000 00000000 00000000 00000010
 +自动类型提升 8bit--32bit
             00000000 00000000 00000000 00000001
             00000000 00000000 00000000 00000010
            +00000000 00000000 00000000 00000011 ==3    

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

Relational operators (comparison)

> >= < <= != ==  (instanceof 比较对象是否是一个类)
1.区分 = 和 ==
  =赋值符号  将=后面的结果(值 引用)存入=左边的变量空间内
  ==比较符号  比较==前面和==后面的元素(值 引用)是否一致
2.比较运算符的最终结果是什么?
  boolen   true   false
  (3>2)--->true;   (3>4)--->false;    (3==4)--->false;
  (3>=2)--->true;  (3>=4)--->false;   (3!=4)--->true;
  一个条件的判定

logic operation

逻辑运算符前后连接的两个都是boolen的值
逻辑运算最终的结果还是boolen

1.条件 我有时间 同时 2条件 嗓子没有问题 才能讲课 
&逻辑与  |逻辑或    ^逻辑异或  !逻辑非
&&短路与 ||短路或
(3>2) & (3>1)    和 并且
true    true
    true
-------------------------------------------------------------------
(3>5) | (3>4)    或者
false   false   
     false 
-----------------------------------------------------------------     
(3>2) ^ (3>4)   异(不同的)--->前后两个结果不一致 就可以
true    false   
    true
(3>2) ^ (3>1)   
true    true   
    false
--------------------------------------------------------------------
!(3>2)  !true false 非 取反
--------------------------------------------------------------------
(3>4) && (3>2) =?
false && true   与两个条件同时满足 如果当第一个条件已经为false 最终肯定是false
     false
---------------------------------------------------------------------
 (3>2) || (3>4)
 true  ||       或两个条件有一个满足 如果当第一个条件为true 最终结果为true 
      true 
 
&&短路与
1.短路 什么情况下才会发生短路? 当前面的值结果为false的时候会发生短路
2.短路 到底短路的是什么?  短路的是&&之后所有计算的过程
3.如果发生了短路情况 性能比 & 稍微好一点
4.&逻辑与 和 &&短路与  从执行的最终结果看了没有任何区别
5.短路与 不一定提高了性能 只有当前面的为false的时候才会发生短路 才会提高性能


逻辑运算符前后连接的应该是两个boolen结果
&逻辑与   可以理解为中文的“和”,"并且"的意思,&前后两个条件必须同时满足 最终才为true
|逻辑或   可以理解为中文的“或者” |前后两个条件只要有一个满足 最终就为true
^逻辑异或 前后两个表达式只要结果不相同 最终结果就为true(专治强迫症)
!逻辑非  可以理解为中文的"不"  将原来的结果取反

Supplementary knowledge base for the conversion

0123456789 Decimal
Binary 01
how decimal ----> Binary
60 decimal ----> 1 or 32 2 is divided by 60 to 60 represent the number of modulo 2 to the remainder of the arrangement is the effective bit flashback
00000000 00000000 00111100 0000000
how binary - > decimal right to left, start to multiply each element of the 2 position (0) of the final power summation


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


every three bit recorded as a group -> long group name (to three decimal bit calculation)
00000000 000 trillion 111 100 000
               0. 7. 4
octal 012,345,667
will be combined into a three binary calculated to decimal representation octal representation of leading zeros
074


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


each bit is recorded as a group of four -> long group name (to 4 decimal bit calculation)
00000000 00000000 0000 0000 0011 1100 is
              0X. 3. 11 a-12 is 10 B-12 is -C 13-D 14-E 15 -F
hexadecimal 012345667189ABCDEF
The three merged into a binary to decimal representation calculate the octal representation starts with 0
0x3C

Bit (bit) arithmetic

&按位与    |按位或     ^按位异或  ~按位取反
<<按位左位移   >>按位右位移  >>>按位右位移(无符号)

1.将3和5转化为二进制表示形式
2.竖着按照对应位置进行 & | ^ 计算(1--->true,0--->false)
3.将计算后的二进制结果转化为十进制
3 & 5 =? 
 00000011
 00000101
 00000001----->1
3 | 5 =?  或
00000011
00000101
00000111------>7
3 ^ 5 =?  异或   
00000011
00000101
00000110------>6

~6=?
知识补充
原码 反码 补码 二进制表示数字
                      6
原码: 00000000 00000000 00000000 00000110
反码: 00000000 00000000 00000000 00000110
补码: 00000000 00000000 00000000 00000110
                负数 -6 
原码: 10000000 00000000 00000000 00000110 将正数的符号改为负
反码: 11111111 11111111 11111111 11111001 符号不动 其余取反
补码: 11111111 11111111 11111111 11111010 在负数的反码上+1
进算机中不管是整数还是负数 存储的形式都是以补码的形式来存储
注意 反码是一中表现形式 取反是一个计算过程(每一个位置都取反)

~6  6取反
00000000 00000000 00000000 00000110 1.6的二进制
11111111 11111111 11111111 11111001 2.取反得到二进制数 是负数 的补码
将二进制转为十进制    
11111111 11111111 11111111 11111000 3.将负数的bu码-1改 反码 
10000000 00000000 00000000 00000111 4.符号不动 其余取反得到原码
00000000 00000000 00000000 00000111 5.将负数的原码转为正数原码
1+2+4=7  取反-7     6.将原码计算出十进制值为7 最后值为-7

6<<1 = 12  6乘以2的1次幂 6*(2*1)=12
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00001100 8+8 = 12

6<<2 = 24 6乘以2的2次幂 6*(2*2)=24
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00011000 16+8 = 24
相当与乘以2的位移次幂 

6>>1=3  6除以2的次幂 6/(2*1)=3
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00000011 2+1=3
相当与除以2的位移次幂

-6>>1 = 3
11111111 11111111 11111111 11111010
?1111111 11111111 11111111 11111101
11111111 11111111 11111111 11111101   1.保留符号位置 1 填1 得到补码
11111111 11111111 11111111 11111100   2.-1得到补码
10000000 00000000 00000000 00000011   3.符号不变 其余取反 得到原码
00000000 00000000 00000000 00000011   4.得到正数
                          2+1         5.计算得3
>>保留符号位置 1 填1
>>>不保留符号 不管是什么 都填0

-6>>>1 = 
11111111 11111111 11111111 11111010
?1111111 11111111 11111111 11111101
01111111 11111111 11111111 11111101   1.不保留符号 不管是什么 都填0
1*2 ^0    1                      
0*(2^1=2) 0                  1 
1*2^2     4                  5
1   ^3    8                  13   
    ^4    16                 29
    ^5    32                 61
    ^6    64                 125
     7    128                253
     8    256                509
     9    512                1021
     10   1024               2045         
     11   2048               4463
     12   4096              
     13   8192              
     14   16384             
     15   32768             
     16   65536
     17   131072           
     18   262144           
     19   524288             
     20   1048576            
     21   2097152             
     22   4194304             
     23   8388608             
     24   16777216             
     25   33554432           
     26   67108864           
     27   134217728        
     28   268435456             
     29   536870912          
     30   1073741824
0 *2^31   2147483648        

Published 30 original articles · won praise 0 · Views 6663

Guess you like

Origin blog.csdn.net/qq_37710756/article/details/103114569
Recommended