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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

二进制、八进制、十六进制和十进制的相互转换,原码反码补码计算以及Java中数字的存储

發布時間:2025/3/19 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二进制、八进制、十六进制和十进制的相互转换,原码反码补码计算以及Java中数字的存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Java中數字默認是十進制,二進制、八進制以及十六進制的表示如下

?

2. 二進制、八進制、十六進制和十進制的相互轉換?

2.1 為了不累贅描述,本文以百度的二進制小數轉換為十進制小數為例,如下圖

2.2 十進制整數轉二進制整數以及十進制小數轉換為二進制小數如下

? ? ?

?

3. 原碼、反碼和補碼?

在理解二進制和十進制轉換后,對于一個整數,比如 7 ,我們知道二進制表示是 0111,但是一個負數的二進制怎么表示呢,你有想過 -8 怎么用二進制表示嗎?在計算機中,存儲的都是補碼,但是我們前面說的二進制和十進制相互轉換都是原碼形式。

3.1 對于正數來說,它的原碼、反碼和補碼是一樣的。

14,原碼:0000 1110,反碼:0000 1110,補碼:0000 1110 34,原碼:0010 0010,反碼:0010 0010,補碼:0010 0010

?

對于負數來說,計算機規定第一位是0表示正數,1表示負數,那么 -14 的原碼就是 1000 1110,-34的原碼是 1010 0010.那么負數的原碼和反碼、補碼有什么關系呢?

3.2 負數的反碼是負數的原碼除符號位全部取反;負數補碼是負數反碼+1

-14,原碼:1000 1110,反碼:1111 0001,補碼:1111 0010 -34,原碼:1010 0010,反碼:1101 1101,補碼:1101 1110

?

有沒有感覺這樣會有點不對勁,0 和 -0 以及邊界,這里以8位示例,對于原碼來說,1111 1111表示負數,正數最大只能0111 1111,此時是+127;負數最小是1111 1111,此時是-127。我們學過一個字節有符號正數它的表示范圍是-128~127,那么-128怎么表示?

3.3? 感覺不對勁的 -0 和 -128 怎么表示

0,原碼:0000 0000,反碼:0000 0000,補碼:0000 0000-0,原碼:1000 0000,反碼:1111 1111,補碼:0000 0000-128,原碼:無 反碼:無 補碼:1000 0000

因此,計算機通過存儲補碼,一個字節可以存儲?-128~127的范圍,沒有 0 和 -0 的區別,存儲的都是0000 0000. 同時因為沒有數的補碼是 1000 0000,那么就直接將 1000 0000表示為 -128,以下通過Java的二進制表示及輸出來說明。

注意:以上8位二進制表示前需要加上(byte)類型,如果不加的話,默認是int類型,那么程序在存儲時會自動在二進制前面補上24個0,那么以下所有的數字都變為正數。只有加上byte強制轉換,那么程序才會在存儲時以真實的8位二進制存儲,

System.out.println((byte)0b00000000);System.out.println();System.out.println((byte)0b00000001);System.out.println();System.out.println((byte)0b00000010);System.out.println();System.out.println((byte)0b01111110);System.out.println();System.out.println((byte)0b01111111);System.out.println();System.out.println((byte)0b10000000);System.out.println();System.out.println((byte)0b10000001);System.out.println();System.out.println((byte)0b10000010);System.out.println();System.out.println((byte)0b11111110);System.out.println();System.out.println((byte)0b11111111);

?

總結

以上是生活随笔為你收集整理的二进制、八进制、十六进制和十进制的相互转换,原码反码补码计算以及Java中数字的存储的全部內容,希望文章能夠幫你解決所遇到的問題。

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