1. 程式人生 > >二進制的原碼、反碼、補碼及相關計算

二進制的原碼、反碼、補碼及相關計算

pan pre 計算機 php 位運算 log 其他 說明 符號

1.二進制的最高位是符號位,0表示正數,1表示負數
2.正數的原碼、反碼、補碼都一樣
3.負數的反碼=它原碼符號位不變,其他位取反(0->1,1->0)
4.負數的補碼=它的反碼+1
5.0的反碼、補碼、都是0
6.php沒有無符號數,就是說php中的都是有符號的
7.在計算機運算的時候都是以補碼的方式來運行的

1 如:
2 以下實例都以4個字節舉例說明
3 1 ---->原碼  00000000 00000000 00000000 00000001
4 1 ---->反碼  00000000 00000000 00000000 00000001
5 1 ---->補碼  00000000 00000000 00000000 00000001
6 
7 -1 --->原碼  10000000 00000000 00000000 00000001
8 -1 --->反碼  11111111 11111111 11111111 11111110    //
符號位不變,其他位取反 9 -1 --->補碼 11111111 11111111 11111111 11111111 //等於反碼+1
 1 求~2的結果
 2 2 --->原碼   00000000 00000000 00000000 00000010   //正數的原碼、反碼、補碼都一樣,所以可以直接按位運算
 3 2的補碼取反  
 4 00000000 00000000 00000000 00000010 ===> 11111111 11111111 11111111 11111101  //取反後變為負數,再按照負數求反碼的規則得到反碼
 5 取反後結果還是補碼,再求反碼 
 6 11111111 11111111 11111111 11111101 ===> 11111111 11111111 11111111 11111100  //
負數的反碼=它的補碼-1 7 再根據反碼求原碼 8 11111111 11111111 11111111 11111100 ===> 10000000 00000000 00000000 00000011 //負數符號位不變,0變1,1變0 9 10000000 00000000 00000000 00000011 ===> -3 10 所以~2 = -3
 1 求~-5的結果
 2 -5 --->原碼 10000000 00000000 00000000 00000101
 3 根據原碼得到反碼 
 4 -5的原碼取反 --->11111111 11111111 11111111 11111010   //符號位不變(0->1,1->0)
 5 根據反碼得到補碼
 6 -5的補碼 ---> 11111111 11111111 11111111 11111011   //
負數的補碼=反碼+1 7 再將補碼取反 8 11111111 11111111 11111111 11111011 ===> 00000000 00000000 00000000 00000100 //計算機底層運算都是在補碼的基礎上計算的,所以先得到補碼再逐位取反 9 00000000 00000000 00000000 00000100 是正數,它的反碼、原碼和補碼一樣 10 00000000 00000000 00000000 00000100 ===>4 11 所以~-5 = 4

二進制的原碼、反碼、補碼及相關計算