當前位置:首頁 » 編程語言 » java移位運算符

java移位運算符

發布時間: 2022-01-16 18:10:55

java的移位運算

全錯。
在java中,對byte型進行位移操作,那麼在移位進行之前,它們會自動轉換成一個int,得到的結果也是int
第一題-17:11111111
11111111
11111111
11101111
(無符號右移2位)後為
00111111
11111111
11111111
11111011
=
1073741819
同上
第二題為:00011111
11111111
11111111
11111010
第三題為0

⑵ java 移位運算

>>是有符號的,你想下負數,往右移動,最大是多少?你試試有符號右移100試試,還是-1。到頭了。想過零就得無符號

⑶ java 位移運算

首先要執行移位操作。。必須將byte轉換成int。。。

bt的二進製表示為1000 0001
轉換成int後二進製表示為 11111111 11111111 11111111 1000 0001

先執行b>>3,右移三位變為:11111111 11111111 11111111 1111 0000
再執行b<<3,左移三位變為: 1111111 11111111 11111111 1000 0000
bt 是byte類型。。所以再截斷。。。取1000 0000
第一位是符號位,1表示負數。。。所以結果就是-128(2的七次方)

同樣的分析方法。。。。
先表示成int的二進制反碼表示方式。。。
11111111 11111111 11111111 1101 0000
右移三位變成:1111111 1111111 1111111 1111 1010
左移三位變成:11111111 11111111 11111111 1101 0000
截斷變成 1101 000
這個反碼表示就是-48
希望能幫到你~!

⑷ java中的移位運算符怎麼理解

就是移位唄,比如 \n 輸出一個換行

⑸ Java 移位>>運算符,看代碼。

-4的二進製表示為1111 1111 1111 1011
i>>3 右移3位,移出的不管,左端補1 變為1111 1111 1111 1111 這是-1的二進製表示,所以結果為-1.
i>>5 同理。

具體原理:
先來說一下怎麼得出負數的二進制。原碼,反碼,補碼,這三個概念搞清。
1、原碼:一個正數,按照絕對值大小轉換成的二進制數;一個負數按照絕對值大小轉換成的二進制數,然後最高位補1,稱為原碼。
比如 00000000 00000000 00000000 00000101 是 5的 原碼。
10000000 00000000 00000000 00000101 是 -5的 原碼。

備註:
比如byte類型,用2^8來表示無符號整數的話,是0 - 255了;如果有符號, 最高位表示符號,0為正,1為負,那麼,正常的理解就是 -127 至 +127 了.這就是原碼了,值得一提的是,原碼的弱點,有2個0,即+0和-0(10000000和00000000);還有就是,進行異號相加或同號相減時,比較笨蛋,先要判斷2個數的絕對值大小,然後進行加減操作,最後運算結果的符號還要與大的符號相同;於是,反碼產生了。

2、反碼:正數的反碼與原碼相同,負數的反碼為對該數的原碼除符號位外各位取反[每一位取反(除符號位)]。
取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)
比如:正數00000000 00000000 00000000 00000101 的反碼還是 00000000 00000000 00000000 00000101
負數10000000 00000000 00000000 00000101 的反碼則是 11111111 11111111 11111111 11111010。

反碼是相互的,所以也可稱:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互為反碼。

備註:還是有+0和-0,沒過多久,反碼就成為了過濾產物,也就是,後來補碼出現了。

3、補碼:正數的補碼與原碼相同,負數的補碼為對該數的原碼除符號位外各位取反,然後在最後一位加1.
比如:10000000 00000000 00000000 00000101 的補碼是:11111111 11111111 11111111 11111010。
那麼,補碼為:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

備註:1、從補碼求原碼的方法跟原碼求補碼是一樣的 ,也可以通過完全逆運算來做,先減一,再取反。
2、補碼卻規定0沒有正負之分

所以,-5 在計算機中表達為:11111111 11111111 11111111 11111011。轉換為十六進制:0xFFFFFFFB。

搞懂二進製表示後,再來說一下左移右移運算符。
左移運算是將一個二進制位的操作數按指定移動的位數向左移位,移出位被丟棄,右邊的空位一律補0。右移運算是將一個二進制位的操作數按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位或者一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1。(均由機器來定)

So,為什麼得到-1知道了吧~~~

⑹ java移位運算符>>>和>>的區別

「>> 右移,高位補符號位」 這里右移一位表示除2
「>>> 無符號右移,高位補0」; 與>>類似
「<< 左移」 左移一位表示乘2,二位就表示4,就是2的n次方

⑺ Java移位運算符問題

有符號右移會保留最高位的符號位,從次高位開始逐位右移填0;而無符號右移會將符號位一起右移,並將高位全部填0。
例:對於一個byte類型的數10010100來說,有符號右移2位變為10000101,而無符號右移2位變為00100101。前者仍然是一個負數,而後者變成了正數。
左移只有有符號的,沒有無符號左移。

⑻ java中左移運算

不是java任何語言都沒有, 位運算中左移跟符號沒有關系的, 因為最高位就是符號位
例如8位的byte中最高位如果是 1那就表示負數 如果是左移一位, 那麼最高位就會丟掉, 最低位補0 1111 1111 << 1 就會變成 1111 1110

⑼ java移位運算

這個試一下就知道了
比如-2 假定只有8位 1000 0010
如果是原碼 那麼就是1000 0010 >>1 =1000 0001 這就是-1
如果是補碼 就是1111 1110>>1 =1011 1111 這就是-63了 (當然 如果是其他位數肯定不是-63)
不過-2>>1是-1 所以是操作的原碼

⑽ Java中左移位運算

左移三位就是乘以8啊 ,你這樣記:左移n位就是乘以2的n次方

熱點內容
演示文稿如何取消密碼 發布:2024-12-25 21:21:18 瀏覽:96
最近上傳視頻 發布:2024-12-25 21:05:39 瀏覽:393
php招聘源碼 發布:2024-12-25 21:05:38 瀏覽:988
c語言輸入數組賦值 發布:2024-12-25 21:01:43 瀏覽:652
22款賓士e買哪個配置 發布:2024-12-25 20:54:08 瀏覽:737
金鏟鏟之戰怎麼看之前的伺服器 發布:2024-12-25 20:52:36 瀏覽:448
unix環境高級編程英文版 發布:2024-12-25 20:50:35 瀏覽:291
我的世界電腦版伺服器如何改實驗模式 發布:2024-12-25 20:41:57 瀏覽:129
資料庫刪過程 發布:2024-12-25 20:39:38 瀏覽:447
創建sql存儲過程 發布:2024-12-25 20:29:14 瀏覽:531