日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中的位操作

發(fā)布時(shí)間:2025/3/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中的位操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前做項(xiàng)目的時(shí)候使用位操作不是很多,今天在刷leetcode上題目的時(shí)候用到了位操作,是leetcode中的第29題Divide Two Integers。

一、java的位操作:

位運(yùn)算表達(dá)式由操作數(shù)和位運(yùn)算符組成,實(shí)現(xiàn)對(duì)整數(shù)類型的二進(jìn)制數(shù)進(jìn)行位運(yùn)算。位運(yùn)算符可以分為邏輯運(yùn)算符(包括~、&、|和^)及移位運(yùn)算符(包括>>、<<和>>>)。

1)左移位運(yùn)算符(<<)能將運(yùn)算符左邊的運(yùn)算對(duì)象向左移動(dòng)運(yùn)算符右側(cè)指定的位數(shù)(在低位補(bǔ)0)。左移一位(在不溢出的情況下)相當(dāng)于乘以2。?

2)“有符號(hào)”右移位運(yùn)算符(>>)則將運(yùn)算符左邊的運(yùn)算對(duì)象向右移動(dòng)運(yùn)算符右側(cè)指定的位數(shù)。 “有符號(hào)”右移位運(yùn)算符使用了“符號(hào)擴(kuò)展”:若值為正,則在高位插入0;若值為負(fù),則在高位插入1。右移一位相當(dāng)于除以2。

3)Java也添加了一種“無符號(hào)”右移位運(yùn)算符(>>>),它使用了“零擴(kuò)展”:無論正負(fù),都在高位插入0。

4)若對(duì)char,byte或者short進(jìn)行移位處理,那么在移位進(jìn)行之前,它們會(huì)自動(dòng)轉(zhuǎn)換成一個(gè)int。 只有右側(cè)的5個(gè)低位才會(huì)用到。這樣可防止我們?cè)谝粋€(gè)int數(shù)里移動(dòng)不切實(shí)際的位數(shù)。 若對(duì)一個(gè)long值進(jìn)行處理,最后得到的結(jié)果也是long。在leetcode這道題目里面需要用到的類型是long。

5)在這6種操作符,只有~取反是單目操作符,其它5種都是雙目操作符。

二、java位操作的實(shí)際操作:

我們從其他博客里面看到的位操作的舉例往往都是給一個(gè)數(shù)字,然后通過syso進(jìn)行輸出操作。

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

但是需要注意的是,如果進(jìn)行賦值操作和C/C++中是不一樣的。

在C/C++中進(jìn)行左移和右移操作:

div << 1; res << 1;

但是在java中進(jìn)行位移操作需要配合賦值操作:

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++中進(jìn)行操作一樣,會(huì)不能編譯通過。

三、位操作的一些應(yīng)用題:

1)判斷奇偶

只要根據(jù)最未位是0還是1來決定,為0就是偶數(shù),為1就是奇數(shù)。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)來判斷a是不是偶數(shù)。下面程序?qū)⑤敵?到100之間的所有偶數(shù)。

2)交換兩數(shù)

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

3)變換符號(hào)

?

如對(duì)于-11和11,可以通過下面的變換方法將-11變成11

?

1111 0101(二進(jìn)制) –取反-> 0000 1010(二進(jìn)制) –加1-> 0000 1011(二進(jìn)制)

?

同樣可以這樣的將11變成-11

?

0000 1011(二進(jìn)制) –取反-> 0000 0100(二進(jìn)制) –加1-> 1111 0101(二進(jìn)制)

其他的應(yīng)用可以參考博客文章:

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

其中有很多對(duì)java位操作的應(yīng)用介紹。

?

轉(zhuǎn)載于:https://www.cnblogs.com/winterfells/p/7596877.html

總結(jié)

以上是生活随笔為你收集整理的java中的位操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。