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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java位运算实例详解——(amp;)、(|)、(~)、(^)、(lt;lt;)、(gt;gt;)

發布時間:2024/10/14 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java位运算实例详解——(amp;)、(|)、(~)、(^)、(lt;lt;)、(gt;gt;) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

位運算種類

~:按位取反
&:位與
|:位或
^:異或
<<:左移
>>:右移
>>>:邏輯右移

注意這里沒有<<<運算符

準備工作

位運算要求我們要把十進制轉換成二進制來進行相關計算,

而且要知道計算機在算二級制數的時候,會把兩數轉換成補碼來進行計算,結果也是以補碼的形式存在的正數補碼等于原碼,負數補碼等于原碼的反碼+1(這個很重要)

如果不了解原碼反碼補碼請參考我的另一篇博客原碼,反碼補碼詳解

各運算符詳解

(1)~:按位取反

舉個例子~7

我們把7寫成二進制就是:00000111

按位取反就是把0變成1,1變成0

即:
00000111
~
——————
11111000

既然是補碼且最高位為1,那么結果必定為負數,那么就要把它變成原碼再轉換成十進制

要求原碼先求反碼(反碼=補碼-1)
即:
11111000
-1
——————
11110111

原碼就為:
11110111
——————
10001000
符號位不變

最后把二進制轉換成二進制就得到了-8

所以~7=-8;

(2)&:位于

舉個例子5&(-7)

首先一樣的把兩者都寫成二進制

5:00000101

-7:10000111

位于就是都為1則結果是1,其他情況都是0

由于-7需要轉換成補碼所以參與運算的實際上是11111001
即:
00000101
&
11111001
——————
00000001

補碼結果是00000001為正數所以原碼等于補碼

故轉換成十進制為:1

所以5&(-7)=1

(3)|:位或

舉個例子6|4

化成二進制:

6:00000110

4:00000100

位或就是二者只要有一個為1結果就是1
即:
00000110
|
00000100
——————
00000110

補碼結果是00000110為正數所以原碼等于補碼

轉換成十進制為6

即6|4=6

(4)^:異或

舉個例子8^(-3)

轉化成二級制

8:00001000

-3:10000011

異或就是相同為0不同為1

-3參與運算的補碼為11111101

即:
00001000
^
11111101
——————
11110101
補碼為11110101

那么原碼就是10001011

轉換成十進制就為-11

即8^&(-3)=11

(6)<<:表示左移,不分正負數,低位補0

注:以下數據類型默認為byte為8位,左移時不管正負,低位補0

正數:r = 20 << 2

20的二進制補碼:0001 0100

向左移動兩位后:0101 0000

結果:r = 80

負數:r = -20 << 2

-20 的二進制原碼 :1001 0100

-20 的二進制反碼 :1110 1011

-20 的二進制補碼 :1110 1100

左移兩位后的補碼:1011 0000

反碼:1010 1111

原碼:1101 0000

結果:r = -80

(7)>>: 表示右移,如果該數為正,則高位補0,若為負數,則高位補1;

注:以下數據類型默認為byte為8位

正數:r = 20 >> 2

20的二進制補碼:0001 0100

向右移動兩位后:0000 0101

結果:r = 5

負數:r = -20 >> 2

-20 的二進制原碼 :1001 0100

-20 的二進制反碼 :1110 1011

-20 的二進制補碼 :1110 1100

右移兩位后的補碼:1111 1011

反碼:1111 1010

原碼:1000 0101

結果:r = -5

(8)>>> 表示無符號右移,也叫邏輯右移,即若該數為正,則高位補0,而若該數為負數,則右移后高位同樣補0

注:以下數據類型默認為int 32位

正數: r = 20 >>> 2

的結果與 r = 20 >> 2 相同;

負數: r = -20 >>> 2

-20原碼:10000000 00000000 00000000 00010100

反碼:11111111 11111111 11111111 11101011

補碼:11111111 11111111 11111111 11101100

右移:00111111 11111111 11111111 11111011

結果:r = 1073741819

>>這里的-20要寫成32位的而不寫成8位,是因為上邊寫成8位和32結果沒差別,博主為了使運算簡潔就寫成了8位但是這里的32位對結果都要影響所以就不能簡寫成8位

總結

以上是生活随笔為你收集整理的java位运算实例详解——(amp;)、(|)、(~)、(^)、(lt;lt;)、(gt;gt;)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。