91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Java中使用位運算

發布時間:2021-05-18 15:51:30 來源:億速云 閱讀:163 作者:Leah 欄目:開發技術

如何在Java中使用位運算?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、位運算的分類與展現效果

java位運算可以分為左移和右移,其中右移還有無符號右移。

如何在Java中使用位運算
?

java只對整型位移,可以分為int體系和long體系。int體系包括(byte, short, int, char),long體系只包含long。int體系中進行位運算時,除int類型外都會先轉換為int再進行運算。.
無符號右移指的是,向右移動時,左邊補位的是0。
一般來說,右移左移常用作乘2n 或者除以2n。(右移除以2n,左移乘以2n)

int i1 = 4; 
int r1 = i1 >> 2; // 除以2^2
int r2 = i1 << 2; // 乘以2^2
System.out.println(r1); // 1
System.out.println(r2); // 16

二、原理

位運算實際上是將數值對應的二進制進行左右位移操作。java中數值的存儲、運算是以補碼的形式進行的。數值有三種存儲方式:原碼、反碼、補碼。

原碼的最高位為符號位(0為正數,1為負數),其余位用于存儲數值,以8位整型為例,2對應:

0000 0010

-2對應:

1000 0010

??反碼和補碼的正數都與原碼相同。反碼的負數在原碼的基礎上進行,除符號位外,其余按位取反。例如2的反碼為:

0000 0010(正數不變)

-2的反碼為:

1111 1101

補碼在反碼的基礎上進行,反碼加1就變成補碼。

2:

0000 0010(正數不變)

-2為:

1111 1110

8位整型,反碼可以表示的范圍為:[-128,127]

-128的反碼表示為:

1000 0000

可以理解為:

1 1000 0000(原) => 1 0111 1111(反) => 1 1000 0000(補) => 1000 0000(補)

(查看了一些解釋,-128的補碼規定為1000 0000,若不理解,可以先跳過。)

左移即是補碼向左移動,右邊空出的用0補位,右移就是向右動,左邊空出來的以符號位補位。(無符號右移,左邊空出來的以0補位)。下面以具體代碼舉例(int 為32位):

正數:

int i1 = 4; // 0000 0000 0000 0000 0000 0000 0000 0100
int r1 = i1 >> 2; // 期望 0000 0000 0000 0000 0000 0000 0000 0001 = 1
int r2 = i1 << 2; // 期望 0000 0000 0000 0000 0000 0000 0001 0000 = 16
System.out.println(r1); // 實際:1
System.out.println(r2); // 實際:16

負數:

int i2 = -4; // 1111 1111 1111 1111 _ 1111 1111 1111 1100
int r3 = i2 >> 2; // 期望:1111 1111 1111 1111 _ 1111 1111 1111 1111 = -1
int r4 = i2 << 2; // 期望:1111 1111 1111 1111 _ 1111 1111 1111 0000 = -16
int rx = i2 >>> 1; // 期望: 0111 1111 1111 1111 _ 1111 1111 1111 1110 = 2147483646
System.out.println(rx); // 實際:2147483646
System.out.println(r3); // 實際:-1
System.out.println(r4); // 實際:-16

rx記錄無符號右移結果,移動后左邊補位以0補滿,于是結果就變成了2147483646

三、邊界值測試

int類型的范圍為[-2147483648, 2147483647],下面對上下界分別進行測試:

// 邊界值測試:
int imax = Integer.MAX_VALUE; // 21_4748_3647 = 0111_1111_1111_1111_1111_1111_1111_1111 (2^31-1)

int r5  = imax >> 2; // 0001_1111_1111_1111_1111_1111_1111_1111 = (2^30 - 1) = 5_3687_0911

System.out.println(r5);// 實際:5_3687_0911

int r6 = max << 2; // 1111_1111_1111_1111_1111_1111_1111_1100 (補碼形式 ) = -4

System.out.println(r6);// 實際:-4

int imin = Integer.MIN_VALUE; //-21_4748_3648=1000_0000_0000_0000_0000_0000_0000_0000

int r7 = imin << 1; // 0000_0000_0000_0000_0000_0000_0000_0000 = 0

System.out.println(r7); // 實際:0

Java的優點是什么

1. 簡單,只需理解基本的概念,就可以編寫適合于各種情況的應用程序;2. 面向對象;3. 分布性,Java是面向網絡的語言;4. 魯棒性,java提供自動垃圾收集來進行內存管理,防止程序員在管理內存時容易產生的錯誤。;5. 安全性,用于網絡、分布環境下的Java必須防止病毒的入侵。6. 體系結構中立,只要安裝了Java運行時系統,就可在任意處理器上運行。7. 可移植性,Java可以方便地移植到網絡上的不同機器。8.解釋執行,Java解釋器直接對Java字節碼進行解釋執行。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

奉新县| 兴山县| 平邑县| 张掖市| 泽普县| 金寨县| 瑞安市| 会理县| 灵璧县| 江城| 云阳县| 定远县| 西畴县| 泰宁县| 仁怀市| 兰州市| 上杭县| 潢川县| 泌阳县| 滁州市| 蕲春县| 长兴县| 宁国市| 富阳市| 浙江省| 竹北市| 镇宁| 陇南市| 道孚县| 龙口市| 池州市| 泽库县| 桓台县| 宜兰市| 绍兴市| 晋州市| 贵德县| 左权县| 和平县| 屏东市| 镇赉县|