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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

位运算及在java中的应用整理

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

計(jì)算機(jī)編碼:

  • 原碼

符號(hào)位為0表示正數(shù),為1表示負(fù)數(shù);

其余各位等同于真值的絕對(duì)值。

如:0000 0000 0000 0010 =2,1000 0000 0000 0010 =-2

?

  • 反碼

符號(hào)位的用法及正數(shù)的表示與“原碼”一樣;

負(fù)數(shù)的表示是在“原碼”表示的基礎(chǔ)上通過(guò)將符號(hào)位以外的各位取反來(lái)獲得的。

如:0000 0000 0000 0010 = 2,1111 1111 1111 1101 = -2

?

  • 補(bǔ)碼

符號(hào)位的用法及正數(shù)的表示與“原碼”一樣;

負(fù)數(shù)的表示是在“反碼”的基礎(chǔ)上通過(guò)加1來(lái)獲得的。

如:0000 0010 = 2,1111 1110 = -2

計(jì)算機(jī)中負(fù)數(shù)的表示均用補(bǔ)碼,負(fù)數(shù)參與的運(yùn)算得到的也是補(bǔ)碼

?

位運(yùn)算符:

& 與。??? 全1為1, 有0為0。  任何數(shù)與0與都等于0。  

| 或。????? 有1為1, 全0為0。  任何數(shù)與0或都等于原值。

~ 非。???? 逐位取反

^ 異或。? 相同為0,相異為1。????? 任何數(shù)與0異或都等于原值。

?

?

Java基本類型的字節(jié)長(zhǎng)度

java基本類型的的字節(jié)長(zhǎng)度與具體的軟硬件環(huán)境無(wú)關(guān)。Java中的char類型用Unicode碼儲(chǔ)存。

各個(gè)類型長(zhǎng)度為:

byte : 1

short : 2

char : 2

int : 4

long : 8

float : 4

double: 8

boolean : 1

?

?

java各個(gè)類型的二進(jìn)制編碼實(shí)例(System.out.println(Integer.toBinaryString(i));)

int i = 1;

二進(jìn)制表示為:(原碼)

00000000 00000000 00000000 00000001

int i = -1;

二進(jìn)制表示為:(補(bǔ)碼)

11111111 11111111 11111111 11111111

?

long l = 1;

二進(jìn)制表示為:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001

?

特別注意:

負(fù)數(shù)都是用補(bǔ)碼表示并參與運(yùn)算的。得到的也是補(bǔ)碼,需要減1取反獲得原碼。

?

位運(yùn)算事例

-1^1,

-1

1000 0000 0000 0000 0000 0000 0000 0001--原碼

1111 1111 1111 1111 1111 1111 1111 1110--反碼

1111 1111 1111 1111 1111 1111 1111 1111--補(bǔ)碼

1

0000 0000 0000 0000 0000 0000 0000 0001--原碼

?

則-1^1等于

1111 1111 1111 1111 1111 1111 1111 1111^

0000 0000 0000 0000 0000 0000 0000 0001=

1111 1111 1111 1111 1111 1111 1111 1110--補(bǔ)碼

1111 1111 1111 1111 1111 1111 1111 1101--反碼

1000 0000 0000 0000 0000 0000 0000 0010--原碼

即-1^1=-2

?

移位運(yùn)算:

  • 邏輯左移 <<

右邊補(bǔ)0,符號(hào)位就是被移動(dòng)到的位.

?

正數(shù):

x<<1一般相當(dāng)于2x,但是可能溢出.

若x在這個(gè)范圍中: 2的30次方~(2的31次方-1) 二進(jìn)制表示 0100...0000到0111...1111,<<后最高為變?yōu)?了,變成負(fù)數(shù)了.

負(fù)數(shù):

x<<1一般也相當(dāng)于2x,也有可能溢出.

若x在這個(gè)范圍中: -2的31次方~-(2的30次方+1)二進(jìn)制表示1000...0000到1011...1111,<<后最高為變成0了,變成正數(shù)了.

?

  • 算術(shù)右移 >>

為正數(shù)時(shí)左邊補(bǔ)0,為負(fù)數(shù)時(shí)左邊補(bǔ)1.

x>>1,相當(dāng)于x/2,余數(shù)被舍棄,因?yàn)檫@個(gè)是縮小,所以不會(huì)溢出.

不過(guò)有一點(diǎn)要注意: -1右移多少位都是-1.(因?yàn)樨?fù)數(shù)都是用補(bǔ)碼表示,-1永遠(yuǎn)是 11111...)

另外舍棄的余數(shù)是正的:

?3>>1=1? 舍棄的余數(shù)是1.

-3>>1=-2 舍棄的余數(shù)也是1,而不是-1.

對(duì)于正數(shù) x>>1和x/2相等

對(duì)于負(fù)數(shù) x>>1和x/2不一定相等.

?

  • 邏輯右移 >>>

這個(gè)把符號(hào)位一起移動(dòng),左邊補(bǔ)0

對(duì)于正數(shù),>>>和>>是一樣的

對(duì)于負(fù)數(shù),右移之后就變成正數(shù)

?

?

對(duì)char,byte或者short進(jìn)行移位處理,那么在移位進(jìn)行之前,它們會(huì)自動(dòng)轉(zhuǎn)換成一個(gè)int。

但在進(jìn)行邏輯右移位時(shí),也可能遇到一個(gè)問(wèn)題。若對(duì)byte或short值進(jìn)行右移位運(yùn)算,

得到的可能不是正確的結(jié)果(Java 1.0和Java 1.1特別突出)。它們會(huì)自動(dòng)轉(zhuǎn)換成int類型,并進(jìn)行右移位。

但“零擴(kuò)展”不會(huì)發(fā)生,所以在那些情況下會(huì)得到-1的結(jié)果。

?

?

? ? ? ? ? ? ? ? ??

           int i = -1;i >>>= 10;System.out.println(i);System.out.println(Integer.toBinaryString(i));long l = -1;l >>>= 10;System.out.println(l);System.out.println(Long.toBinaryString(l));short s = -1;s >>>= 10;System.out.println(s);System.out.println(Integer.toBinaryString(s));byte b = -1;b >>>= 10;System.out.println(b);System.out.println(Integer.toBinaryString(b));

?

?

?輸出結(jié)果

41943030000 0000 0011 1111 1111 1111 1111 1111180143985094819830000 0000 0011 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111-11111 1111 1111 1111 1111 1111 1111 1111-11111 1111 1111 1111 1111 1111 1111 1111

?

? ?一道詭異的移位題

? int i=-1;
? int j=i>>>32;
? System.out.println(j);

輸出結(jié)果為 -1

JAVA進(jìn)行移位運(yùn)算中因?yàn)閕nt是占32位,進(jìn)行移位的數(shù)是32的模,所以當(dāng)i>>>32的時(shí)候就等于i>>>0,相當(dāng)于沒(méi)有進(jìn)行移位.

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

總結(jié)

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

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