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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基本类型理解巩固及补码原理总结

發(fā)布時(shí)間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基本类型理解巩固及补码原理总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

本篇文章屬于計(jì)算機(jī)基礎(chǔ)通識(shí),主要討論:有符號(hào)類型、無符號(hào)類型的區(qū)別,byte、int 等類型的取值范圍,最大值最小值的計(jì)算公式的由來,原碼、反碼、補(bǔ)碼轉(zhuǎn)換公式。

有符號(hào)類型與無符號(hào)類型

在 Java 中的八大基本類型:byte、short、int、long、float、double、boolean、char 中,前六個(gè)為有符號(hào)類型。

有符號(hào)類型無符號(hào)類型
byteboolean
shortchar
int?
long?
float?
double?

所謂有符號(hào)類型,指的是這種類型本身可以表示負(fù)數(shù)正數(shù)。注意與整數(shù)相互區(qū)分。

有符號(hào)類型都遵從相同的數(shù)值表示規(guī)則,即最高位表示符號(hào)位。下面以 byte 為例進(jìn)行講解。

byte 類型的取值范圍

我們知道,byte 類型只表示一個(gè)字節(jié),那么它究竟是如何表示正數(shù)和負(fù)數(shù)的呢?

對(duì)于有符號(hào)類型,我們會(huì)將 byte 的 8 位分成兩部分——符號(hào)位數(shù)值位

那么byte 的取值范圍就是 -2^7 ~ (2^7 -?1),即 -128 ~ 127。

為什么?

首先我們知道:進(jìn)制、位數(shù)和取值范圍是乘方的關(guān)系。底數(shù)代表進(jìn)制指數(shù)代表位數(shù),所得結(jié)果就表示取值數(shù)量(地址空間)。如下圖所示:

對(duì)于正數(shù),取值范圍表示的是能夠表示的數(shù)字的個(gè)數(shù),是包含 0 的,就好像數(shù)組中長(zhǎng)度與最后一個(gè)數(shù)的索引值,最大值也需要進(jìn)行減 1 處理,因此最大值就是 2^7 - 1,即 127。

對(duì)于負(fù)數(shù),符號(hào)位用 1 表示,然而如此一來就會(huì)出現(xiàn) -0 和 0 這兩個(gè)奇怪的數(shù),于是人為規(guī)定 1 000 0000 表示 byte 類型范圍內(nèi)的最小值。此時(shí),負(fù)數(shù)表示的情況下,7 位數(shù)值的全部取值都表示一個(gè)對(duì)應(yīng)的負(fù)數(shù),而正數(shù)要去掉 1 個(gè) 全 0 的值用來表示數(shù)字 0,因此很明顯負(fù)數(shù)要比正數(shù)多 1 個(gè)數(shù)。即 負(fù)數(shù)可以有 2^7 個(gè),于是最小的數(shù)就是 -2^7 ,即 -128。

原碼、反碼、補(bǔ)碼

原碼,反碼,補(bǔ)碼的產(chǎn)生過程,就是為了解決,計(jì)算機(jī)做減法和引入符號(hào)位(正號(hào)和負(fù)號(hào))的問題。

原碼(true form)是一種計(jì)算機(jī)中對(duì)數(shù)字的二進(jìn)制定點(diǎn)表示方法。原碼表示法在數(shù)值前面增加了一位符號(hào)位(即最高位為符號(hào)位):正數(shù)該位為0,負(fù)數(shù)該位為1(0有兩種表示:+0和-0),其余位表示數(shù)值的大小。一般情況下,原碼就單獨(dú)處理符號(hào)位的一種表示方式,如 -5的8位原碼是:1000 0101;-3 的 8位原碼是 1000 0011;8 的原碼是 0000 1000。注意,如果某個(gè)負(fù)數(shù)取絕對(duì)值后超出位數(shù)所能表示的最大值,比如 -128 ,取模后是128 超出了 byte 類型的表示最大值 127,那么 -128 就沒有原碼。

反碼是原碼除符號(hào)位之外的按位取反。如 -5 的 8 為反碼是 1111 1010;-3 的反碼是 1111 1100 ;8的反碼是 0111 0111。

在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來表示和存儲(chǔ)。

原因在于,原碼雖然簡(jiǎn)單直觀,但是計(jì)算的時(shí)候需要特別將符號(hào)位和數(shù)值位區(qū)分處理,這無形增加了硬件的開銷和復(fù)雜性,而使用補(bǔ)碼,可以將符號(hào)位和數(shù)值位統(tǒng)一處理。

上面部分提到了有符號(hào)數(shù)的取值范圍,它們包含了許多負(fù)數(shù),然而,如果單從表面上觀察,很難將一個(gè)負(fù)數(shù)與其計(jì)算機(jī)內(nèi)部的二進(jìn)制表現(xiàn)形式聯(lián)系起來,比如:byte 類型的 -128,它在計(jì)算機(jī)內(nèi)部的表示是:1000 0000;-125 對(duì)應(yīng)??1000 0011? 。

那么我們就需要了解原碼、反碼、補(bǔ)碼的轉(zhuǎn)換規(guī)則才能快速完成 編碼的轉(zhuǎn)化。

首先,對(duì)于正數(shù)來說,人為規(guī)定:原碼、反碼、補(bǔ)碼完全一樣。除了高位為 0 以外,剩余的 數(shù)值位,可以快速通過 2進(jìn)制與 16進(jìn)制的轉(zhuǎn)化規(guī)則確定,比如 byte 類型的 125 ,十六進(jìn)制是:7D,那么原碼、反碼、補(bǔ)碼都是 ?0111 1101? 。

對(duì)于負(fù)數(shù),補(bǔ)碼(計(jì)算機(jī)中實(shí)際表示的編碼)的計(jì)算規(guī)則為:原碼取反再加一

另外,補(bǔ)碼到原碼的轉(zhuǎn)換也可以通過 先取反,再加一的方式得到,不需要先減一再取反,這樣的特性降低了電路邏輯的復(fù)雜性,也是補(bǔ)碼流行起來的原因。

short、int 等有符號(hào)類型的類推

short 、 int 等其他有符號(hào)類型的值,除了字節(jié)數(shù)不同、位數(shù)較多以外,其他所有的規(guī)律都是類似的。

如int 類型,它在計(jì)算機(jī)中以 4 個(gè)字節(jié)表示,總共32 位,最高位也同樣表示 正負(fù),那么數(shù)值位總共就有 31 位,那么 int 的表示范圍就是 : -2^31 ~ (2^31 - 1)。推理方式和 前面 byte 是完全一樣的。

總之,一定要記住,在計(jì)算機(jī)中,所有負(fù)數(shù) 都是由補(bǔ)碼來表示的,而正數(shù) 直接用原碼表示(但實(shí)際上也是補(bǔ)碼,只不過規(guī)定正數(shù)的補(bǔ)碼、反碼和 原碼要完全一致)

總結(jié)

以上是生活随笔為你收集整理的基本类型理解巩固及补码原理总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。