java移位運算符
⑴ 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次方