參考資料:
https://www.cnblogs.com/wxb20/p/6033458.html
https://www.cnblogs.com/joahyau/p/6420619.html
https://www.cnblogs.com/yulinfeng/p/6602902.html
https://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html
https://www.cnblogs.com/xkfz007/articles/2590472.html(帶小數)
一、十進制轉化二進制
1、正數轉化:
正數25:
25/2 | 12 | 1 |
12/2 | 6 | 0 |
6/2 | 3 | 0 |
3/2 | 1 | 1 |
1/2 | 0 | 1 |
最后一列,倒序排列即為二進制值。
則:25的二進制為:11001 然后32位,高位補0,即:
0000 0000 0000 0000 0000 0000 0001 1001
2、負數轉化:
負數-25
1、先算出正數的二進制。
2、求反碼,即二進制中1變0,0變1
3、反碼+1
所以-25
1、對應的正數25對應的二進制為:
0000 0000 0000 0000 0000 0000 0001 1001
2、反碼:
1111 1111 1111 1111 1111 1111 1110 0110
3、反碼+1:(補碼)(如果最后一位本身為1,則進位,列如1011 +1 為1100)。
1111 1111 1111 1111 1111 111 1110 0111
即為-25的二進制表示值。
二、二進制轉化十進制
1、正數轉化(不夠32位高位補0)
011 1001
654 3210
則為:0*2^6+1*2^5+1*2^4+1*2^3+0*2^2+0*2^1+1*2^0=0+32+16+8+0+0+1=57
2、負數轉化(最高位為1則為負數)
1、先算反碼,即二進制中1變0,0變1
2、反碼+1(補碼)
3、算出對應的正數在加上負號。
例:
1111 1111 1111 1111 1111 1111 1010 1111
反碼:
0000 0000 0000 0000 0000 0000 0101 0000
反碼+1(如果最后一位本身為1,則進位,列如1011 +1 為1100)。
0000 0000 0000 0000 0000 0000 0101 0001
算正數:
1*2^6+0*2^5+1*2^4+0*2^3+0*2^2+0*2^1+1*2^0=64+0+16+0+0+0+1=81
即十進制為-81.
3、八進制、十六進制、十進制、二進制
01111111111111111111111111111001
十進制負數轉八進制、十六進制
負數轉換成八進制、十六進制,只需在補碼(二進制)的基礎上,3位合成一位計算,或者4位合成一位計算
-3的轉換成二進制為:
1111 1111 1111 1111 1111 1111 1111 1101
八進制則將-3的二進制從右至左每3位為一個單元,不夠三位用0補 即:
011 111 111 111 111 111 111 111 111 111 101
計算每一個單元,結果為:37777777775
十六進制則將-3的二進制從右至左每4位合並為一個單元,即:
1111 1111 1111 1111 1111 1111 1111 1101
計算后為: FFFFFFFD
轉換十進制-3為八進制和十六進制
十六進制(0,1,2,3,4,5,6,7,8,9,A,B,C,D,F)
三:>>,<<,>>>移位運算
1、<<
<<,有符號左移位,將運算數的二進制整體左移指定位數,低位用0補齊。
正數:5<<2
1、轉化為二進制:
0000 0000 0000 0000 0000 0000 0000 0101
2、整體左移指2位數
0000 0000 0000 0000 0000 0000 0001 0100
3、轉化為十進制
1*2^4+1*2^2=16+4=20
M<<N相當於M*2^n.
負數:-5<<2
1、轉化為二進制:
1111 1111 1111 1111 1111 1111 1111 1011
2、整體左移指2位數
1111 1111 1111 1111 1111 1111 1110 1100
3、轉化為十進制
-20
M<<N相當於M*2^n.
2、>>
>>有符號右移位,將運算數的二進制整體右移指定位數,正數高位用0補齊,負數高位用1補齊(保持負數符號不變)
正數:5>>2
1、轉化為二進制:
0000 0000 0000 0000 0000 0000 0000 0101
2、整體右移指2位數
0000 0000 0000 0000 0000 0000 0000 0001
3、轉化為十進制
1*2^0=1
M>>N相當於M/2^n 取商
負數:-5>>2
1、轉化為二進制:
1111 1111 1111 1111 1111 1111 1111 1011
2、整體右移指2位數
1111 1111 1111 1111 1111 1111 1111 1110
3、轉化為十進制
-2
M<<N相當於如果運算數是偶數,那么那么它的運算結果就是 x = -(|x| / 2),如果運算數是奇數,那么它的運算結果就是 x = -(|x| / 2) - 1
3、>>>
>>>無符號右移位,不管正數還是負數,高位都用0補齊(忽略符號位)
1、正數的>>>無符號右移位和>>有符號右移位計算結果相同
2、負數
-5>>>2
1、轉化為二進制:
1111 1111 1111 1111 1111 1111 1111 1011
2、整體右移指2位數
0011 1111 1111 1111 1111 1111 1111 1110
3、轉化為十進制
1073741822