⑴ java如何把 int型負數轉換成 int型正數
將負數轉化成正數的方法:
1、對已知是負數的數值轉化方法:假設a為已知負數,則intb=-a;則b為所需正數;
2、對不確定正負性的數值轉化方法:假設有a,正負不確定,則可用:intb=Math.abs(a);取絕對值的方式來將數值轉化成正數。
(1)java負數移位擴展閱讀:
整數(int類型的常量)有幾種書寫形式,程序中的整數一般採用十進制寫法。用十進制方式寫出的一個整數就是普通數字字元組成的一個連續序列,其中不能有空格、換行或其他字元。C語言規定十進製表示的數字不能是0,除非要寫的整數本身就是0。下面是一些整數的列子。
⑵ 使用java里的位移運算符時右邊輸入負數,會怎麼樣
我們知道,java int 是32位,並且位運算要用補碼,舉個例子
那麼在位移<<或者>>右邊的值i要用補碼,並且因為是32位的,所以右邊位移i只取補碼的後6位,
例如
2<<-1 因為-1的補碼是 111111111111.....所以把有效的1移出32位界了,就變0了
2<<3 = 2<<67
3補碼 0000....000011
67補碼00000...1000011
他們都只移了三位
⑶ 為什麼Java中負數無符號右移64位得到本身,無符號右移65位,會得到一個很大的數值
為什麼Java中負數無符號右移64位得到本身,無符號右移65位,會得到一個很大
⑷ java中 >>> 有什麼用怎麼6>>>1和6>>1一樣
對負數移位結果就不一樣了。
>>>在移位負數時左邊補0,所以就變正數了
>>在移位負數時左邊補1,移動完還是負數
例如
-1000>>>2,-1000>>2是不同的。
>>>-1是不行的,會先取32的模,因此會右移動31位,所以肯定變0了
⑸ java移位運算問題:「-1>>1」和「-1>>>1」有何差別
>>這個是帶符號右移。。。。
>>> 這個是無符號右移。。。。
-1的二進制反碼表示為 11111111 11111111 11111111 11111111
-1>>1的結果是 : 1111111 1111111 11111111 1111111
-1>>>1的結果是: 01111111 11111111 1111111 11111111
無符號右移後前面補0,而帶符號右移是補符號位,也就 是第一位,負數補1,正數補0
希望對你有幫助。。。。仍有問題可以HI我。。。
⑹ java做ip轉int時,碰到如下代碼,對移位運算部分不太理解
&0xFF是為了保留正數值。因為java的byte變數ipByte可能有負數值,經過<<位移產生負數結果,最後強制用&0xFF00等得到一個位元組的正數值。所例演算法不是很理想,ipByte中每個位元組可以先&0xFF再位移...
⑺ Java移位運算符問題
有符號右移會保留最高位的符號位,從次高位開始逐位右移填0;而無符號右移會將符號位一起右移,並將高位全部填0。
例:對於一個byte類型的數10010100來說,有符號右移2位變為10000101,而無符號右移2位變為00100101。前者仍然是一個負數,而後者變成了正數。
左移只有有符號的,沒有無符號左移。
⑻ Java問題 運行結果:(a=b)=10 (-24>>1)=-12 (-24>>>)=2147483636
這里給你介紹一下二進制問題。
int類型是四個位元組,如int型的1的二進制就是:
00000000 00000000 00000000 00000001
-1是:
11111111 11111111 11111111 11111111
1+(-1)= ? 可以每一個位相加。得到結果是:
00000001 00000000 00000000 00000000 00000000
如果每個位手工相加得到的是五個位元組的數,而int型是四個位元組,越界了。
所以結果只取後面四個位元組,即32位:
00000000 00000000 00000000 00000000 所表示的值就是0,
與實際1+(-1)=0相符。
如果讓-1移位,即(-1)>>>1會是多少呢?
11111111 11111111 11111111 11111111 向右移移位得到:
01111111 11111111 11111111 11111111 這個數是int類型最大的數,
也就是Integer.MAX_VALUE的值。
所以通常負數移位都是大的正數。