算术运算符
基本的有:+ - * / %
自增 自减:++ --
- 对于基本算数运算符,如果有运算单元超过int,则按最长的长度运算;如果不超过int,则按int运算(Java 1.5之后有自动数据转换)
- %是取于,也叫取模
- 自增自减有直前和置后的区别
int i = 5;
i++;//先取值,在自增
++i;//先自增,再取值
关系运算符
用于比较两个变量之间的大小关系
> 大于
>= 大于或等于
== 等于
!= 不等于
逻辑运算符
& 长路与
&& 短路与
| 长路或
|| 短路或
! 取反
^ 亦或
- 长路与和短路与 以及 长路或和短路或,需要注意的长路运算与短路运算的区别,短路运算有时只需要计算左边的部分。左边为false时,短路与一定为false;左边为true时,短路或一定为true。
- 亦或,运算两边相同时为false;不同时为true
位运算符
位运算符是针对二进制运算的运算符号。
Integer.toBinaryString() 一个整数型的二进制表达
| 位或
& 位与
^ 异或
~ 取非
<< 左移
>> 右移
>>> 无符号右移
数的二进制表达
数在数字电路中的二进制表示形式成为机器数,在数字电路中把一个数的最高位作为符号位,并用0表示“+”,用1表示“-”。
二进制正负数的表示法有原码、反码、补码。
三种表示法对正数都是一样的,即符号位为0,随后是二进制数的绝对值。
对负数而言,3中表示法不一样。
1、 原码表示法(最直接)
负数符号位1,随后是二进制数的绝对值。
如(-45)的原码=(10101101)
2、 反码表示法(相当与对源码表示法全部取反)
负数符号位为1,随后将每位二进制取反。
如(-45)反码=(11010010)
3、 补码表示法(负数符号位为1,随后是二进制的补码。补码通过反码加1得到。)
如(-45)补码=(11010011)
补码可以用加法来计算减法,如M-N,可以先求N的补码再加上M就可以了,即M-N=M+(-N)。设一个负数-N,则N的反码+N的补码=进位1的数。
在Java中二进制负数表示采用的是补码的方式。
以负数-5为例:
1.先将-5的绝对值转换成二进制,即为0000 0101;
2.然后求该二进制的反码,即为 1111 1010;
3.最后将反码加1,即为:1111 1011
所以Java中Integer.toBinaryString(-5)结果为11111111111111111111111111111011
位与
int i =5;
int j = 6;
System.out.println(Integer.toBinaryString(i)); //5的二进制是101
System.out.println(Integer.toBinaryString(j)); //6的二进制是110
System.out.println(i|j); //所以 5|6 对每一位进行或运算,得到 111->7
位或
int i =5;
int j = 6;
System.out.println(Integer.toBinaryString(i)); //5的二进制是101
System.out.println(Integer.toBinaryString(j)); //6的二进制是110
System.out.println(i&j); //所以 5&6 对每一位进行与运算,得到 100->4
异或
int i =5;
int j = 6;
System.out.println(Integer.toBinaryString(i)); //5的二进制是101
System.out.println(Integer.toBinaryString(j)); //6的二进制是110
System.out.println(i^j); //所以 5&6 对每一位进行或运算,得到 011->3
取非
byte i =5;
System.out.println(Integer.toBinaryString(i)); //5的二进制是00000101,所以取非即为11111010,即为-6
System.out.println(~i);
左移 右移
左移:根据一个整数的二进制表达,将其每一位都向左移动,最右边一位补0
右移:根据一个整数的二进制表达,将其每一位都向右移动(即去掉最右边一位),按符号进行“补位”
byte i =6; //6的二进制是110
System.out.println(Integer.toBinaryString(i));
System.out.println(i<<1); //6向左移1位后,变成1100,对应的10进制是12
System.out.println(i>>1); //6向右移1位后,变成11,对应的10进制是3
带符号右移
带符号右移 >>
对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1无符号右移>>>
如果是一个负数,那么对应的二进制的第一位是1 ,无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0
无符号右移不会进行补位,使得负数在无符号右移后,得到一个正数
int i =-10;
//-10的二进制是11111111111111111111111111110110
//第一位是1,即符号位,代表这是一个负数
System.out.println(Integer.toBinaryString(i));
//对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
//对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
//-10带符号右移1位,移动后前面补齐1
//得到11111111111111111111111111111011
//因为第一位是1,所以依然是一个负数,对应的十进制是-5
int j = i>>1;
System.out.println(Integer.toBinaryString(j));
System.out.println(j);
//-10无符号向右移1位,符号位也会向右移,第一位就变成了0
//得到01111111111111111111111111111011,对应的十进制是2147483643
int k = i>>>1;
System.out.println(Integer.toBinaryString(k));
System.out.println(k);
赋值操作符
= 赋值操作
----以下运算 对本身进行运算,并赋值
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=
三元操作符
表达式:值1 ?值2
如果表达式为真 返回值1
如果表达式为假 返回值2
更于 2016-07-01 10:44