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

歡迎訪問 生活随笔!

生活随笔

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

java

java 整数变负数_一文帮你读懂Java整数的存储原理

發布時間:2025/3/12 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 整数变负数_一文帮你读懂Java整数的存储原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

大家應該都知道,整數包括負數,零,和正數。在Java中,基本類型中byte(8位)、short(16位)、int(32位)、long(64位)屬于整數,并且沒有無符號數,均是有符號的。對于計算機來說,它只認識二進制,也就是0和1,那我們開發過程中所使用的整數(大多是10進制)在計算機中是怎么存儲成二進制的呢?本文將詳細解讀Java整數在計算機中的存儲原理。

整數的編碼方式

整數的編碼分為原碼、反碼和補碼。計算機使用的是補碼的存儲方式。它們的定義如下:

原碼:在數值前面增加了一位符號位(即最高位為符號位),該位為0表示正數,該位為1表示負數,其余位表示數值的大小。

反碼:正數的反碼與其原碼相同。負數的反碼是對其原碼逐位取反,但符號位除外。

補碼:正數的補碼與其原碼相同,負數的補碼就是對該負數的反碼加1。

因為計算機是以補碼來存儲整數的,所以補碼就顯得很重要。那么如何計算整數的補碼呢?下面以具體例子來說明。

100 -> 原碼/反碼/補碼:01100100

0 -> 原碼/反碼/補碼:00000000

-100 -> 原碼:11100100 -> 絕對值:01100100 -> 取反加1:10011011+1 -> 補碼:10011100

1 -> 原原碼/反碼/補碼:00000001

-1 -> 原碼:10000001 -> 絕對值:00000001 -> 取反加1:11111110+1 -> 補碼:11111111

127 -> 原碼/反碼/補碼:01111111

-128 -> 絕對值:10000000 -> 取反加1:01111111+1 -> 補碼:10000000

從定義可以看出,正數的補碼,反碼,原碼相同。0的補碼就是本身。

那么負數的原碼和補碼如何轉換呢?

  • 已知一個負數求補碼方法:絕對值原碼按位求反加1。
  • 已知負數補碼求負數方法:符號位不變,其他位按位求反加1。

有了原碼,為什么還要用補碼來存儲整數

下面我們以基本類型byte為例來說明這個問題,

因為byte是8bit,從理論上講,如果利用充分的話,那么它應該可以表示2^8=256個數值。

如果采用原碼來存儲

1 - 1 = 1 + ( -1 ) =(00000001) + (10000001) = (10000010) = -2 這顯然是不正確的。

原碼在兩個整數的加法運算中是沒有問題的,問題出現在帶符號位的負數身上。原碼無法滿足運算要求。

如果采用反碼來存儲

反碼的取值空間和原碼相同且一一對應。所以反碼的表示范圍位:-127到-0到+0到+127,共255個數值,這里我們把+0和-0都當成0對待。

下面是反碼的減法運算:

1 - 1 = 1 + ( -1 )= (00000001) + (11111110) = (11111111) = ( -0 ) 沒問題。1 – 2 = 1 + ( -2 ) = (00000001) + (11111101) = (11111110) = ( -1 ) 正確。

反碼的問題出現在(+0 : 00000000)和(-0 : 11111111)上,因為在人們的計算概念中零是沒有正負之分的。

如果采用補碼來存儲

1 - 1 = 1 + (-1) = (00000001) + (11111111) = (00000000) = 0 正確。 1 – 2 = 1 + (-2) = (00000001) + (11111110) = (11111111) = ( -1 ) 正確。

00000000 表示0,10000000(0的反碼:01111111加上1) 表示 -128

通過補碼的運算,可以看出補碼的設計目的是:

  • 使符號位能與有效值部分一起參加運算,從而簡化運算規則。
  • 使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。
  • 此外,在補碼中用-128(10000000)代替了-0,所以沒有+0和-0之分,符合常理,所以補碼的表示范圍為: -128到127共256個。
  • 補碼剛好是充分利用了byte的8bit空間。

結語

本文詳細解讀了Java整數(包括正數和負數)在計算機中的存儲原理,并且以byte基本數據類型為例闡述了采用補碼的形式存儲數值的好處,希望大家看完本篇后能夠弄清楚整數在計算機中的存儲原理。

總結

以上是生活随笔為你收集整理的java 整数变负数_一文帮你读懂Java整数的存储原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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