java中的运算符

Java运算符?
Java中进行运算时所需要运用到的一些符号。
需要参加运算的数据的类型相同,
如果参加的运算类型不同,会有类型转换过程发生。
转换成同一类型再进行计算。


如何进行强制转换?
例如byte:

int i = 1;
byte b = i;

这样肯定是不行的,因为i是int类型的数,把i转换成byte类型
必须要经过强制转换,因此要写成下面这样。

int i = 1;
byte b = (byte)i;

字符串数据和任何数据做+运算,都没有加法的含义,
这个+是一个连接符,任何数据和字符创相连接都会变成一个新的字符串

例如:System.out.prinitln(“5+5=”+5+5);
输出是5+5=55

**
byte b1 = 3;
byte b2 = 4;

byte b3 = b1 + b2;
byte b4 = 3 + 4;

byte b3 = b1 + b2;
编译失败,
因为计算机不知道b1是多少,b1是一个变量
byte b4 = 3 + 4;
编译通过。计算机在编译时判断3+4是否在byte范围内,如果是
即可编译通过。


算数运算符-----------------------------

+ 加   - 减   * 乘   / 除
%   取余(就是一个数除以另一个数的余数)
对于取余运算来说
例如2%3
当左边小于右边,结果是左边,
左边等于左边,结果是0
如果出现负数,结果指依赖于左边的符号。
常见用法:
对2进行取模运算,结果不是0,就是1,可以完成一个切换算法。

++ 自增(前) ++a
++  自增(后) a++
-- 自减(前) --a
--   自减(后) a--

前++ 和 后++的区别?
a++ 与 ++a 执行之后a的值是一样的,不同的是,
++a是先让a+1,然后取出a的值进行计算;
a++是先取出a的值进行计算,然后a+1。
例如
int a = 3,b=4;
int c = b + a++;
System.out.println(c);
c的值是7

int a = 3,b=4;
int c = b +  ++a;
System.out.println(c);
c的值是8



赋值运算符-----------------------------
= , += , -= , *= , /= ,%=
例示:
int a,b,c;
a = b = c = 3;
int a = 3; a += 5等同于运算a = a+5;


**
short s = 3;
s = s+2;和s += 2;
有什么区别?

s = s+2 不会通过编译,因为2是int型的,
是四个字节的,而s是两个字节的,所以会出现错误。
而s += 2不会出现编译错误,因为 += 是赋值运算符
这是一个赋值语句,所以会有一个自动转换动作。


比较运算符--------------------------------
== 相等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
Instanceof 检查是否是类的对象

逻辑运算符--------------------------------
& 与



| 或



^ 异或



! 非


&& 短路与
|| 短路或


&& 和 & 的区别?
&是无论左边是true还是false,两边都运算
&&是当左边卫false时,右边就不用计算了。
&可以表示位运算符




||和|的区别
|是两边都计算
||当左边是true右边就不用计算了
|可以表示位运算符

位运算符------------------------------------
<< 左移
>> 右移
>>> 无符号右移
& 与运算
| 或运算
^ 异或运算
~ 反码

位运算符的特点
6的二进制数是110, 3的二进制数是011

反码其实就是取反,对二进制取反,将0变1,1变0.

如何求负数的二进制?
负数的二进制其实就是对应的整数,进行取反+1;
-6 = 1111-1111 1111-1111 1111-1111 1111-1010;
负数的二进制,最高位都是1.

如何计算&运算?



异或:
一个数异或另一个数两次,结果还是这个数。

怎样不通过第三方变量交换两个变量的值?
  int a = 3;
  int b = 5;
  a = a^b;
  b = a^b;
  a = a^b;
  这样就交换了,因为第一步a=a^b,第二步b=a^b相当于b=a^b^b=原a;
  第三步a = a^b就相当于a = a^b^a^b^b=原b


在简单的加密软件中可以用的到

X就相当于那个密钥,只要知道了x的值,和的值就全都知道了


什么是<<(左移)运算符?
左移运算符就是将一个数字转换成二进制数,让整体向左移。
例如6的二进制数是第一行,第二行是左移之后的二进制数。

6<<1 = 12;相当于 6*2 = 12;
但是左移的运算效率很高。
左移的特点:乘以2的次幂(移几位,就是几次幂)

什么是>>(右移)运算符?
右移运算符就是将一个数字转换成二进制数,让整体向右移。
例如6的二进制数是第一行,第二行是左移之后的二进制数。

右移:就是一个除以2的次幂动作(移几位,就是2的几次幂)

什么是>>>(无符号右移)运算符?
一般的>>右移是最高位为0,右移后,最高位的空位用0补。
如果最高位为1,右移后,最高位的空位用1补。
而>>>无符号右移是无论最高位是0还是1,右移后,出现空位,都用0补。

>>>(无符号右移)的用法?
例如 第一行是60的二进制表现形式

第二行是15的二进制表现形式

第三行是 60 & 15 的二进制表现形式(12)。
12的二进制是1100,而1100是六十的二进制表现形式的最后四位,
如果想要获取60二进制数的最后的4--8位,可以用无符号右移运算符

int num = 60;
num = num >>> 4;

















你可能感兴趣的:(java)