java中之个操作

事先做项目的当儿下各类操作不是众多,今天在刷leetcode上问题之下以了各类操作,是leetcode中之第29书写Divide
Two Integers。

一律、java的个操作:

位运算表达式由操作数和各类运算符组成,实现对整数类型的亚前进制数进行各类运算。位运算符可以分成逻辑运算符(包括~、&、|和^)及动运算符(包括>>、<<和>>>)。

1)左移位运算符(<<)能拿运算符左边的演算对象为左移动运算符右侧指定的位数(在亚补0)。左移一员(在无溢起底状下)相当给随着以2。 

2)“有号子”右走运算符(>>)则将运算符左边的运算对象为右侧走运算符右侧指定的位数。
“有标志”右走运算符使用了“符号扩展”:若值为刚,则于高位插入0;若值为借助,则以高位插入1。右变一各相当给除为2。

3)Java为填补加了一如既往种植“无符号”右走运算符(>>>),它采取了“零恢弘”:无论正负,都于高位插入0。

4)若对char,byte或者short进行动处理,那么以活动进行事先,它们会活动转换成为一个int。
只发右侧的5单没有才会用到。这样只是预防我们当一个int数里活动不切实际的位数。
若对一个long值进行处理,最后抱的结果为是long。在leetcode这道题目里面待动用的花色是long。

5)在马上6栽操作符,只有~取反是单目操作符,其它5种都是肉眼操作符。

亚、java各项操作的实际操作:

俺们打外博客中看到底各操作的比方往往都是被一个数字,然后经过syso进行输出操作。

程序:
public class PlusRightMoving{
    public static void main(String[] args){
           System.out.println("5>>1="+(5>>1));
    }
}
输出结果:
5>>1=2

只是急需留意的是,如果展开赋值操作及C/C++中是勿均等的。

以C/C++中开展左移和右移操作:

div << 1;
res << 1;

而当java中开展动操作需要相当赋值操作:

long div = 1;
long res = 1;
while(div < dived){
    div = div << 1;
    res = res << 1;
}
    if(div != dived){
    div = div >> 1;
    res = res >> 1;
}

假定只是是像C/C++中开展操作一样,会无可知编译通过。

其三、位操作的局部用题:

1)看清奇偶

要根据绝不位是0尚是1来控制,为0就是偶数,为1就是奇数。因此好就此if ((a
& 1) == 0)代替if (a % 2 ==
0)来判定a是休是偶数。下面程序用输出0到100之内的备偶数。

2)交换两数

int c = 1, d = 2; 
c ^= d; 
d ^= c; 
c ^= d; 
System.out.println(“c=” + c); 
System.out.println(“d=” + d);

3)转换符号

 

设若对-11暨11,可以经过下的变方式将-11化11

 

1111 0101(二进制) –取反-> 0000 1010(二进制) –加1-> 0000
1011(二进制)

 

一致好这么的将11改为-11

 

0000 1011(二进制) –取反-> 0000 0100(二进制) –加1-> 1111
0101(二进制)

别的采用得参照博客文章:

http://blog.csdn.net/wfzczangpeng/article/details/51819471

其间起众多针对性java各类操作的行使介绍。