1. 程式人生 > 其它 >二進位制運算

二進位制運算

技術標籤:網路傳輸java補碼

二進位制有原碼 反碼 和補碼
計算機中在運算時使用的都是補碼
btye 型別 (-128)- (127)
btye型別在java中站一個位元組 一個位元組=8位(bit)
計算機只能儲存0和1

1111 1111
當全部存滿時算出來是255
如果只是這樣的話負數怎麼表述 如果上述的 1111 1111 的十進位制是255的話顯然沒有地方可以識別符號號了
所以計算機中規定 1開頭是負數 1111 1111 實際上是 -127
正數127的二進位制是 0111 1111 
當 0111 1111 和 0000 0001相加時 一般等於128 但是超過了btye的範圍 會報錯

補碼

二進位制直接儲存都是補碼
正數的話原碼和補碼都是相同的

原碼

二進位制運算時都是要使用原碼進行運算
正數的話原碼和補碼都是相同的

反碼

當負數要從補碼轉化成原碼時就要先轉換成反碼
反碼也很簡單就是把除符號位 之外全部取反
1111 1110 (-126的補碼)的反碼是 1000 0001(-126的反碼)
再轉化為原碼 (原碼就是反碼 +1)1000 0010(-126的原碼)
1000 0000是-128的補碼
1111 1111是-128的反碼
1 1000 0000是-128的原碼
1111 1111是-127的補碼
1000 0000是-127的反碼
1000 0001是-127的反碼

1000 0010
0000 0001
1000 0011(上述兩個相加完之後的結果 按理說是 -125)

先是 (125
0111 1101 加上符號 1111 1101 取反 1000 0010 +1轉原碼 1000 0011 和上面運算結果相同
0111 1111127的二進位制)
1000 0001-1的二進位制)
1 0111 1110 這明顯就不對了 應該是(0111 1110126的二進位制))
這裡就要涉及到溢位了 二進位制設計很巧妙
就像看手錶一樣 雖然是24小時但是人一般習慣 12個小時那樣的叫
從下午2點到早上10點 可以撥動時針 逆時針4位 也可以順時針82 + 8 = 10
2 - 4 = 10 實際上是 (2 +12 - 4= 10)
有負數的運算就 2 +-4-4
的原碼就相當於是(12 -4) 因為它是實際上是12進位制算是