java用的原码还是反码_java 原码 反码 和补码
--------- 原碼、補碼、反碼
計算機是數字電路設備,由復雜的電子元器件組合而成,一個電子元器件在工作時,可以分為兩種狀態--高電平和低電平,表示數據用高電平表示1,低電平表示0,而多個電子元器件組合在一起時就可以表示更多的狀態,即更多的數據,如:000表示0,001表示1,010表示2等等,這也就是我們所說的2進制數據表示法。我們把一個電子元器件表示的數字稱為1位(bit),計算機一般將8個電子元器件組合成一個單元,稱為一個字節(byte),即這個單元可以表示2^8=256個數字,取值范圍0~255.
一個字節有8位,每一位都只可以表示兩個數字0、1,我們把最左邊的一位稱為最高位,最右邊的一位稱為最低位。為便于描述,這里采用1個字節表示一個整數。
原碼:
把最高位作為符號位,0表示正數,1表示負數。其余各位代表數值本身的絕對值,例如:
1表示為0000 0001,-1表示為1000 0001
7 表示 0000? 0111?? -7 原碼表示為: 1000 0111
但是計算機并沒有采用原碼的計數方式表示數據,為什么呢?? 問題出在這:+0表示為0000 0000,-0表示為1000 0000.
這樣一來+0似乎不等于-0了。
反碼:
反碼的表示分為兩種情況:
如果一個數為正數,則反碼和原碼相同. 同時 補碼也和他們相同.
如果一個數為負數,則符號位不變,其余各位按原碼取反。
例如:?? 1的原碼為0000 0001,反碼為0000 0001.
-1的原碼為1000 0001,反碼為1111 1110.
同樣的問題存在于反碼:+0的反碼為0000 0000??? -0的反碼為1111? 1111。正因為如此,人們尋找出了一種真正能使計算機表示數據無歧義的數據表示方法:補碼。
補碼:
模的概念:模是計量系統的計量取值范圍。例如:時鐘就可以看成是個計量器,它的取值范圍是0~11,即模(mod)=12,
計算機也可以看成計量器。
“?!钡膶嵸|是計量器“溢出”的量,是計量器不能表示的數值。任何有模的計量器都能化減法為加法運算,例如:在以10為模的系統中,8和2相對于模來說互為“補數”,實際上1和9,3和7等都有這個共同點,他們加起來等于10(模),他們都互為補數,那么,6-2 =4,2和8互為“補數”,6+8 = 14,去掉一個“?!?#xff1a;10,即14-10 =4;
在計算機中 數字用補碼表示, 主要是為了0 的交叉問題:
+0 的原碼:0000 0000
+0 的反碼 0000 0000
+0 的補碼: 0000 0000
-0 的補碼: 0000 0000 導致結果一樣 .因此 用補碼表示 計算中的數字.
為什么要設立補碼呢?
第一是為了能讓計算機執行減法:
[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
特別注意,如果+1之后有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)
[10000000]補
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
同樣,在計算機里面,n位計算機,設n=8,則他所能表示的數據取值范圍是1111 1111,若再將該數值加1,等于1 0000 0000
有9位,由于計算機只有8位,所以最高位自然丟失,又變成0000 0000,所以,n位計算機的模就是2^n,這樣,計算機就可以把減數用它相應的補數代替了。把補數用到計算機數的處理上,就叫補碼。
補碼表示:
如果一個數為正,那么補碼、反碼原碼都相同,如果一個數為負,那么他的補碼就是他的反碼加1。
,-42就是通過將42的二進制代碼的各個位取反,即對00101010 取反得到11010101 ,然后再加1,得到11010110 ,即-42 。
-42
1. 先得到它的絕對值轉換成的二進制: 0010 1010 或者是得到-42 原碼:1010 1010
2. 然后對這個值取反 1101 0101 或著是 原碼取反碼:? 負數取反的步驟是;最高位不變,其他位取反 1101 0101
3 在這個再加1?????????? 1101 0110 (1+1 =10)
其實第1 種做法是錯誤的, 因為 補碼:反碼+1 .? 應該先求得 -42 的原碼 : 然后求反: 然后+1 ,而不應該是絕對值取反 因為正數的原碼 和反碼,補碼都相同.
對正數取反? 得到的結果就不是反碼了. 只是單純的取反.
負數的原碼怎么求: 先得到正數的二進數,然后把最高位變為1.
負數的反碼怎么求: 在原碼的基礎上,最高位不變, 其他各位取反.
未完。。。。繼續寫
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java用的原码还是反码_java 原码 反码 和补码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 共享内存获取写权限_跨进程访问
- 下一篇: java泛型循环break contin