二進制的原碼、反碼、補碼及相關計算
阿新 • • 發佈:2017-07-01
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
二進制的原碼、反碼、補碼及相關計算