日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java用的原码还是反码_java 原码 反码 和补码

發布時間:2024/9/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 原码 反码 和补码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。