Java SE-运算符

算术运算符

基本的有:+ - * / %
自增 自减:++ --
  • 对于基本算数运算符,如果有运算单元超过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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值