進位詳解

來源:互聯網
上載者:User

標籤:

位元:從右至左為由低到高。最高位就是最左邊的第一位

1.二進位的最高位是符號位:0正數,1負數

2.正數的原碼,補碼,反碼都一樣

3.負數的反碼=它原碼符號位不變,其他位取反(0->1,1->0)。注意反碼和取反(~)運算的區別,反碼符號位不變,其他取反。而取反運算包括符號位都要取反

4.負數的補碼=它的反碼+1 

5.0的反碼,補碼都是0

6.java沒有無符號數,java的數都是有符號的

7.電腦運算的時候,都是以補碼的方式運算

如:int a=1;最低位表示2^0,就是最後一位:2^(1-1) ,倒數第二位:2^(2-1),倒數第三位:2^(3-1)

00000000 00000000 00000000 00000001 –>表示1*2^0

00000000 00000000 00000000 00000011->表示1+1*2^1  

00000000 00000000 00000000 00000111->表示1+ 1*2^1  +1*2^2

 

求:1+1=?,因為兩個都是正數,所以計算的時候雖然是以補碼的方式,但正數的補碼和原碼一樣

00000000 00000000 00000000 00000001

+00000000 00000000 00000000 00000001

       00000000 00000000 00000000 00000010(逢二進一,上下1+1=2)

 =0*2^0+1*2^1=2

求:1-2=?,實際就是求1+(-2),1的補碼就是原碼,-2的補碼是它的反碼+1,而它的反碼是符號位不變,其他取反

1的原碼:00000000 00000000 00000000 00000001 

1的補碼:00000000 00000000 00000000 00000001 

-2的原碼:   10000000 00000000 00000000 00000010

-2的反碼:  11111111 11111111 11111111 11111101

-2的補碼=反碼+1:                  

11111111 11111111 11111111 11111101

+00000000 00000000 00000000 00000001

=11111111 11111111 11111111 11111110       

 

1+(-2)=?

1的補碼+(-2)的補碼:

00000000 00000000 00000000 00000001

+ 11111111 11111111 11111111 11111110

=11111111 11111111 11111111 11111111 (因為符號位(最高位)是1,所以表示負數,所以運算的結果是為補碼,所以要將補碼轉成原碼:反碼=補碼-1,然後將反碼的符號位不變,其他位取反)

  11111111 11111111 11111111 11111111

-         00000000 00000000 00000000 00000001

=  11111111 11111111 11111111 11111110(反碼)->進行取反

   10000000 00000000 00000000 00000001 (原碼)

= -1

位元運算符(~,|,&,^)

求:~2=?(取反,0->1,1->0,符號位一樣要去反)注意反碼和取反的區別,反碼符號位不變,其他取反

2的原碼:                     00000000 00000000 00000000 00000010

取反:          11111111 11111111 11111111 11111101 (符號位是1,所以是負數,得到的那就是補碼)

反碼=補碼-1:   -00000000 00000000 00000000 00000001

                      =  11111111 11111111 11111111 1111100

原碼=反碼取反:  10000000 00000000 00000000 00000011

               =-(1+1*2^1)

                                =-3

求:~-5=?(取反,0->1,1->0,符號位一樣要去反),對負數取反,就是對負數的補碼進行取反

-5的原碼:10000000 00000000 00000000 00000101

-5的反碼:11111111 11111111 11111111 11111010      (反碼=符號位不變,其他取反)

                +   00000000 00000000 00000000 00000001    

-5的補碼:11111111 11111111 11111111 11111011

對-5的補碼進行取反

00000000 00000000 00000000 00000100(符號位為正數,補碼和原碼一樣)

=4

求:2&3=?按位與(兩位全為1,則為1)

2:00000000 00000000 00000000 00000010

3:00000000 00000000 00000000 00000011

=  00000000 00000000 00000000 00000010

=2

求:2|3=?按位或(有一個1,則為1)

=  0000000 00000000 00000000 00000011

=3

 

求:-3^3=?(異或,兩個不同才為1)

-3的原碼:10000000 00000000 00000000 00000011

-3的反碼:11111111 11111111 11111111 11111100

-3的補碼:11111111 11111111 11111111 11111101

3的補碼: 00000000 00000000 00000000 00000011

異或:     11111111 11111111 11111111 11111110(最高位為1,是負數,得到的是補碼,將他轉成原碼)

反碼:     11111111 11111111 11111111 11111110

           —00000000 00000000 00000000 00000001

                            =11111111 11111111 11111111 11111101(減時:將11111110退一位(不就是變成2嗎)類似11111102

然後11111102-00000001=11111101)

原碼:    10000000 00000000 00000000 00000010(反碼取反。符號位不變)

                     =-2

移位元運算(<<,>>>,>>)在記憶體中運算,非常快

移位元運算都是以補碼的形式運算

求:1>>2(低位溢出,符號位不變,並用符號位補溢出的最高位):2表示兩位

1的補碼:

0000000 00000000 00000000 00000001 然後向右移2位,則1跑出了32位中,其他的用0補齊

0(00)00000 00000000 00000000 00000000 (01)01跑出去了,左邊的向右移2位,符號位不變,並用符號位補最高位(因為0為符號位,所以用0去補)所以結果為0

 

求:-1>>2

-1的補碼:11111111 11111111 11111111 11111111 向右移2位,符號位不變,其他的用符號位補齊

                        1(11)1111 11111111 11111111 11111111 (11)11被溢出來了,然後用符號位補齊。因為符號位為1,所以用1去補齊。因為符號位為1,所以為負數,得到的是補碼,所以將補碼得到原碼

補碼:11111111 11111111 1111111 11111111

反碼:11111111 11111111 1111111 11111110

原碼:10000000 00000000 00000000 00000001

=-1

求:1<<2 (符號位不變,低位補0,移動一位相當於乘以2^1,移動2位相當於乘以2^2)

所以1*2^2=4

求:2<<2 = 2*2^2=8

  求:-1<<2 ->-1*2^2=-4

  求: 2<<4-> 2*2^4=32

  求:1<<1  -> 1*2^1=2

 

 

 求:3>>>2 (低位溢出,高位補0)

3的補碼:00000000 00000000 00000000 00000011

向右移2為:0(00)00000 0000000000 00000000 00000000 (11)

      =0;

 

F表示一個16進位,因為一個位元組一個8位,所以一個位元組等於2個16位。

向右移24為,就是將01111111 11111111 11111111 11111111變為00000000 00000000 00000000 01111111

將第一位(最高位)的第一個0移動到最後一位(最低位)的第一個0。從左至右:位元由高到低

 

 

想要把一個int值存入流中,就要像上面一樣存,先i>>>24到I,因為int是1個位元組,write只能一個一個位元組的存,所以先把最低位的1個位元組存進去後,再存高位的

 

進位詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.