整數的表示方式精解

2021-07-04 13:48:22 字數 3901 閱讀 7759

整數的表示方式精解

這一屆比較重要,不對,

是很重要

.上一次我們說了布林代數以及

c語言的位運算.

c語言中的整數型別以及範圍 以c

語言為例

,c語言當中提供了多種整數型別

,一共始終

,位數為

1,2,4,8,

其中32

位機器上

,4位的有兩種

,64位的機器上

,8位的有兩種

.下面是32位

os上,這十種整數的範圍:

32位的系統不常見了

,來看一下64位

os上的範圍:

說實話,

差不多,

你不用背過.

上述是c

語言中各個整數型別的表示範圍,不過

c語言有他的最小數值範圍

,也就是說

c語言要求這些資料型別至少要滿足乙個標準的範圍

.下圖是

c語言對整數型別要求的最小表示範圍:

仔細看的話,

可以發現

,c語言只要求有符號數的範圍是對稱的

,另外就是

int和

long

型別的位數要求都比較低

,分別是2位和

4位.

無符號編碼

你可看到以上的表中,

每一種整數型別都可以加上

unsigned

關鍵字,

來表示乙個乙個無符號數

,即沒有正負之分

.在書中

,給出了無符號數的定義

,對於乙個

w位的二進位制來說

,它的無符號表示為以下形式:

對於乙個無符號編碼來說,

他的最大值和最小值很好確定

,對於乙個

w位的二進位制序列來說

,當所有位都為0時

,則為最小值,即

: uminw = 0

當所有位都為1時,

則為最大值

,根據等比數列的求和公式,即

:umaxw = 1 * (1-2w) / 1 - 2 = 2w - 1 

如果把上述的定義看成是乙個函式的話,

那麼這個函式就是乙個雙射

.就是所

,對於任意整數

x,當0 =

存在唯一的二進位制序列與其對應

.反過來也是一樣的

,對於任意乙個

w位的二進位制序列

,都存在唯一乙個整數

x滿足0 =

無符號編碼屬於相對比較簡單的格式,

因為它符合我們的慣性思維

,上述定義其實就是對二進位制轉換為十進位制的公式而已

,只不過在一向嚴格的數學領域來說

,是要給予明確的含義的

補碼編碼

無符號編碼符合人們的慣性思維是沒錯,

但是可惜的是

,無法表示負整數

.因此我們需要一種能夠表示負數的整數表示方式

,這就是補碼編碼

.與無符號編碼一樣

,書上有定義

,即對於任意乙個

w位的二進位制來說

,它的補碼表示為以下形式:

這裡最高位xw-1為符號位,

當它為1時,

該公式得到的值為負數,當為

0時,得到的則為正數.

我們觀察這個公式,

不難看出

,補碼格式下

,對於乙個

w位的二進位制的序列來說

,當最高位為

1,其餘位全為0時

,得到的就是補碼格式的最小值,即

: tminw = -2w-1 

當最高位為0時,,

其餘位全為1時

,得到的就是補碼格式的最大值

,根據等比數列的求和公式,即

: tmaxw = 1 * (1 - 2w-1) / 1 - 2 = 2w-1-1

與無符號編碼一樣,

如果把上述的定義看成是乙個函式的話

,那麼這個函式同樣是乙個雙射

.就是說

,對於任意整數

x,當-2w-1 =

存在唯一的二進位制序列與其對應

.反過來

,對於任意乙個

w位的二進位制序列

,都存在唯一乙個整數

x滿足-2w-1 =

黨對於無符號的編碼來說,

補碼編碼與我們的慣性思維有些不同

,因此直觀的理解起來會有些彆扭

,誰讓我們幹這一行呢

,幹一行愛一行.

兩種編碼的轉換

在c語言中

,我們經常使用強制型別轉換

,之前我也說過強制型別轉換

.強制型別轉換不會改變二進位制序列

,但是會改變資料型別的大小以及解釋方式

,那麼考慮相同型別的無符號編碼和補碼編碼

,資料型別的大小是沒有任何變化

,變化的就是他們的解釋方式.比如

1000

這個二進位制序列

,如果永無符號編碼解釋的話就表示

8,而採用補碼編碼解釋的話

,則表示

-8.

c語言允許有符號與無符號之間的相互轉換。在同是w個

bit表示的基礎上,由於有符號與無符號表示的範圍不同,因此它們之間的轉換與數值意義上的轉換會有不同。規則是

「位不變,值可能變」!

看乙個例子,如用3

個bit

表示的無符號數

5,其編碼為

101,轉換成補碼表示的有符號數的結果為

-3。讓我們看看

-3的補碼表示,正是

101。意即轉換的時候位串是不變的,還是一樣的位串,只不過解釋方式不同,原先是用於解釋為無符號編碼,現在用於解釋為補碼編碼。下面我們看看具體的轉換方式是怎樣的。

首先定義函式u2t

w(x),它把乙個無符號數x

對映成乙個補碼表示的有符號數。如上面的例子有

u2t3

(5)=-3。來看看這個函式的對映關係到底是怎樣的。由於轉換的時候位是不變的,因此我們首先把x

轉成它的無符號編碼表示的

2進製位串x→

=u2b

w(x),其中u2b

w(x)是b2u

w的反函式,作用是把x

對映成它的無符號編碼串。接下來用b2

tw(x

→)就得到了結果,即

。可見,轉換的結果取決於最高有效位是0還是1

,也即x

是小於2

w-1(0)還是不小於2

w-1(1)。於是有

同樣的由補碼表示的有符號數轉換成無符號數的關係為

這是我寫過最操蛋的部落格,沒有之一,弄格式的時候我連吃人的心都有了!!!

演算法精解 快速排序 方式1

前言 快速排序工作原理就是先在序列中找到乙個基準值,我稱為k值。然後小於k的放在k的前面,大於k的放在k的後面。其實我們每操作k一次,就相當於把序列分為兩個部分,一部分大於k,一部分小於k,就這樣周而復始。我們可以推測出平均的時間複雜度為lgn,為啥這樣說呢。但是書本上說的為nlgn,其實他是每次都...

整數的表示

計算機中整數用補碼表示 對於乙個整數 x 的01序列 x x x 3x 2x 1x 0 其 x 的值為 2 x sum limits 2 i x i 例如x的二進位制序列為1001011,x 2 6 2 3 2 1 2 0 53 也就是最高位是負的,其餘都是正的。c語言中位拓展有兩種方法,一種是零拓...

數值資料的表示 整數

定點數的表示 三要素 進製計數制 十進位制,八進位制 定點數的二進位制編碼 原碼,補碼,移碼,反碼 並且 解決了正負號的問題 定點整數的表示 無符號整數,帶符號整數 整數採用進製表示.計算機表示小數點 計算機中只能通過約定小數點的位置來表示小數點 1.小數點位置約定在固定位置的數成為定點數.2.小數...