正如你所知,當談論 中央處理器 或 GPU,你可能聽過 整數和浮點數也許您在程式設計中也見過它,這取決於特定語言接受的資料類型。無論如何,許多人仍然不知道這些數字是什麼,它們的差異、用途等等。因此,在本教程中,我們將為您一一解釋…
您可能還有興趣了解:
- 什麼是 FLOPS?
術語

在開始討論整數和浮點數的理論之前,需要記住以下幾點: 概念或詞彙 您將在本文中看到這些術語。您應該了解的術語包括:
- 資料類型:指資料依照格式表示的類型,例如整數、浮點數、字串等,另外,還可以是有符號的、無符號的等等,並且可以用二進制、十進制、十六進制、八進制等表示。
- Longitud:資料長度是指表示資料所需的位數。例如,一個資料類型可以是 8 位,這意味著它可以表示為從 00000000 到 11111111,相當於用十進位表示 0 到 255(共 256 個可能的值)。
- 指數:這是表達式與自身相乘一定次數的一種方式。
- 台面:對於有指數的數字,指數應用到該數字本身。
- 尾數:是浮點數小數點前的部分。
- 精確:指值的精確程度。
整數
很多 數腸 這些數字除了零之外,還包括正數和負數。 「整數」一詞源自拉丁語,表示它們不是帶有分數或小數的數字。
整數的定義
整數是一個數字 沒有小數或小數部分 包括負數、正數,以及零(作為另外兩個數的起點)。此外,這些數字在數學中通常以字母 Z 表示:
Z= {…-7,-6,-5,-4,-3,-2,-1…}
- 正數: 若一個數大於零,則為正數。例如,1、2、3 等。這些數通常不帶任何符號,或在前面加一個 +。
- 負數: 若數字小於零,則為負數。例如:-1、-2、-3…如你所見,它們前面必須總是有一個「-」(在二進位代碼中,可以使用符號位)。
- CERO:它沒有被定義為負數或正數。它只是一個整數,而且是一個中性數。此外,正如你所知,這個數字起源於阿拉伯世界,並從現在的安達盧西亞傳到了歐洲其他地區。它是現代計算所基於的二進制系統的基礎。
整數運算
說到整數,有幾種 算術數學運算 這些都是基本要素,例如:
- 蘇馬整數加法是求兩個或多個整數總和的過程。它可能會增大或減小,因為如果你加的是負數,它們會起到減法的作用,你應該知道這一點。
- 當兩個整數的符號相同時,它們的絕對值會相加。例如:1 + 2 = 3,-3 + (-2) = -5。
- 如果整數的符號不同,則必須進行減法運算,正如我之前提到的,也就是數值相減。例如:12 + (-1) = 11
- 雷斯塔減法是求兩個或多個數之間的差的過程,在這種情況下,根據符號的不同,減法也可能導致數的增加或減少。減法也有其自身的規則,就像加法一樣。例如,如果我們要減 (+4) - (+3) = 1,那麼 4 - 7 = -3。
- 乘法:整數乘法也根據符號使用不同的規則。您可以查看下面的乘法表來了解這些規則。舉例:3 x 11 = 33,-2 x 1 = -2。
- 師:對於整數除法,類似的程序也適用,我想不需要解釋。下表也保留了下來。
| 乘積或乘法 | 導致 | 例子 |
|---|---|---|
| (+)×(+) | + | 2×3 = 6 |
| (+)×(-) | - | 2 × (-3) = -6 |
| (-)×(+) | - | (-2)×3=-6 |
| (-)×(-) | + | (-2)×(-3)= 6 |
| 師 | 導致 | 例子 |
|---|---|---|
| (+)÷(+) | + | 12÷3 = 4 |
| (+)÷(-) | - | 12 ÷ (-3) = -4 |
| (-)÷(+) | - | (-12)÷3=-4 |
| (-)÷(-) | + | (-12) ÷ (-3) = 4 |
當處理二進位表示的整數時,CPU 將在執行單元中執行這些簡單的算術運算,例如 ALU (算術邏輯單元)或特定的加法、乘法等單元。此外,您應該知道,其他運算也可以透過這些基本運算來實現…
在數位系統中
不過,到目前為止,我們假設這些是十進制數。但正如你所知,在計算機上,它們被使用 數字值,因此加法、減法、乘法、除法也不同:
- 蘇馬:此二進位運算涉及以下位元運算:
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 0 + 1 |
例如,110 + 100 = 1010。也就是說,從右到左,0+0=0、1+0=1 和 1+1=2(但由於二進位中沒有 2,而是 10,所以結果是 0,取 1)。
- 雷斯塔:二進制減法在這種情況下也有一定的特點,如下表所示:
| 0 | 0 | 0 |
| 1 | 0 | 1(檢測結果為陰性時不允許使用 0-1) |
| 1 | 1 | 0 |
例如,0-0=0,1-0=0,1-1=0,101-010=11。另外,你應該知道,也可以用二進位補碼來減去一個二進位數。將減數的補碼加上被減數,也可以得到結果。
當我們談論帶有數值和符號的十進制數時,我們指的是表示負數。為此,可以在前面使用 0 表示正號,使用 1 表示負號。例如,如果我們有值 11(3),並且想要用符號表示它,我們可以用 011(+3)表示正數,用 111(-3)表示負數,但必須標明正負號,否則可能會與二進制數 111(相當於 +7)混淆。
- 乘法:至於二進位乘法,這非常簡單,因為您不必考慮不同的乘法表,只需考慮 0 和 1 的結果:
| 0 | 0 | 0 |
| 0 | 1 | 0(與 1×0 相同) |
| 1 | 1 | 1 |
因此,唯一結果為 1 的運算結果為 1x1。其他所有運算結果均為 0。例如,12x2 的二進位表示為 1100x10:
1100 x = 10 11000
如果我們將 11000 轉換成十進制,我們會發現它實際上是 24…
- 師:除法也很簡單,可以理解為二進制乘法和二進制減法。也就是說,它與十進制除法相同,但在執行十進制除法中的減法時,必須按照我們在減法部分中看到的方式進行。乘法也與乘法部分中的運算相同。
有關更多信息 二進位邏輯運算,這是另一篇文章.
浮點

雖然整數是精確的,但從數字上來說 浮點 (浮點數或定點數),情況並非如此。這些數字表示分數或小數,因此它們更複雜。此外,表示它們需要比簡單的整數位更複雜的東西,正如我們將看到的。
例如: 儲存 在記憶體中,數字 2(10)只需儲存 10 位元即可。但浮點數不能以相同的方式存儲,因為你會遇到一個問題:你儲存的第一個數字或值是什麼?想像一下 0.01。在這種情況下,你必須定義它的具體儲存方式。
這就是為什麼浮點數被分成 三個基本組成部分:
- 西諾:表示某位表示的正號或負號。例如,0 表示正數,1 表示負數。
- 指數:是相乘的數字,例如可以用 8 位表示。
- 馬蒂薩:是數字本身的值,可以用 23 位元表示。也就是說,總長度為 32 位,不過它們可以有不同的長度,我們稍後會看到。
例如,二進制浮點數為:
10000000000000101010011110001000
在這種情況下,我們有符號位,即 1,後面跟著表示指數的位元組 00000000,最後是分子,即 00000101010011110001000。
精確
你還必須知道那是什麼 精度 浮點值,因為當涉及 CPU 和 GPU 以及此類資料的效能測試時,你會經常聽到這個資訊。
- 單精度:這是對總共 32 位數的浮點數的稱呼。在這種情況下,使用 4 個位元組(即 32 位元)來表示該數字,因此結果不是像整數那樣的 32 位元數字。相反,如我們先前所見,需要減去 1 位作為符號位,再減去 8 位作為指數位,剩下 23 位作為分子。
- 雙精確度:這些是 64 位數,這意味著它們可以表示比單精度數更多的值。例如,我們有這種情況,其中符號位為 1 位,指數位為 11 位,分子位為 52 位:

雖然我們一般只討論單精度和雙精度浮點,但也有其他格式,例如 16 位元、128 位元等。儘管這些是最典型的。
溢出
El 溢出 當您嘗試儲存一個大於所選模型所能充分儲存的數字時,就會發生浮點溢位。您應該知道,這會產生錯誤,因為並非所有位元都能存儲,並且任何算術或邏輯運算的結果都會與您期望的實際結果不同。這將導致軟體錯誤…
IEEE 標準 754
El IEEE 浮點運算標準(IEEE 754) 它是由 1985 年制定的浮點計算技術標準 電機與電子工程師協會(IEEE).
該標準解決了各種浮點實現中發現的許多問題,這些問題使得 可靠地使用。因此,儘管可能存在其他更奇特的表示方法,但必須要說的是,IEEE 754 標準是當今電腦中實數最常見的表示方法,無論使用何種 CPU 架構和作業系統。
正如我們之前所說,IEEE 754 標準由以下部分組成 三個基本部分,但這些部分有特定的長度:
- 馬蒂薩的標誌:表示數字是正數還是負數。位 0 表示正數,位 1 表示負數。
- 有偏指數:在這種情況下,它必須用正數和負數表示。將偏差加到實際指數以獲得儲存的指數。
- 標準化 Matisa:在這種情況下,它是科學計數法中數字的底數。
例如,這裡我們將IEEE 754數字根據上面的三個組成部分分為兩種:單精度和雙精度。
| 類型 | 西諾 | 有偏指數 | 規範化尾數 | 傾角 |
|---|---|---|---|---|
| 單精度 | 1(位 31) | 8(30-23) | 23(22-0) | 127 |
| 雙精確度 | 1(位 63) | 11(62-52) | 52(51-0) | 1023 |
例子 -
例如:85.125 85 = 1010101 0,125 = 001 85,125 = 1010101,001 =1.010101001x2^6 符號 = 0
特殊值
IEEE 保留了一些可能引起歧義的值,這些值對您來說也非常重要:
- 零: 它是一個以指數和幅度 0 表示的特殊值。另一方面,-0 和 +0 是不同的值,儘管兩者相等。
- 非規範化: 如果指數全為零,但尾數不為零,則該值為非規格化數。這意味著該數在二進制小數點前沒有假定的初始數。
- 無限: 正無窮和負無窮的值以指數位全為 1 和尾數全為 XNUMX 表示。符號位區分負無窮和正無窮。 IEEE 中對無窮值的運算有明確的定義。
- 非數字(NAN): NAN 值用於表示錯誤值。當指數欄位全為 1 且符號位元為零,或尾數非 XNUMX 且後跟零時,即表示為誤差值。這是一個特殊值,可用來表示程式設計中尚未賦值的變數。
| 指數 | 尾數 | VALUE |
|---|---|---|
| 0 | 0 | 正好 0 |
| 255 | 0 | 無限 |
| 0 | 沒有0 | 非規範化 |
| 255 | 沒有0 | 非數字(NAN) |
與雙精度類似,但在上表中,不是 255,而是 2049。
| 非規範化 | 規範化 | 近似小數 | |
|---|---|---|---|
| 單精度 | ±2 -149 一個(1 – 2 -23 )×2 -126 | ±2 -126 一個(2 – 2 -23 )×2 127 | ± 約 10 -44,85 大約10 38,53 |
| 雙精確度 | ±2 -1074 一個(1 – 2 -52 )×2 -1022 | ±2 -1022 一個(2 – 2 -52 )×2 1023 | ± 約 10 -323,3 大約10 308,3 |
正浮點數的範圍可分為 規範化數與非規範化數 僅使用小數部分的精度。由於每個浮點數都有對應的負值,因此上述範圍圍繞零對稱。
使用目前介紹的方案,單精度浮點數無法表示五個不同的數字範圍:
- 小於 – (2 – 2 -23 ) × 2 127 (負溢出)
- 大於 -2 的負數 -149 (負溢出)
- CERO
- 小於 2 的正數 -149 (正下溢)
- 大於 (2 – 2 -23 ) × 2 127 (正溢出)
El 溢出 這通常意味著值太大而無法表示,正如我在整數情況下已經提到的那樣。下溢是一個不太嚴重的問題,因為它只表示精度損失,精度保證非常接近零。
IEEE有限浮點數總有效範圍表如下:
| Binario | 十進制 | |
|---|---|---|
| 單身 | ± (2 – 2 -23 ) × 2 127 | 約±10 38,53 |
| 雙 | ± (2 – 2 -52)×2 1023 | 約±10 308,25 |
特別行動
| 手術 | 導致 |
|---|---|
| n÷±無窮大 | 0 |
| ±無窮大 × ±無窮大 | ±無限 |
| ±非零÷±0 | ±無限 |
| ±有限 × ±無限 | ±無限 |
| 無限+無限 無限——無限 | +無限 |
| -無限 – 無限 -無限+-無限 | -無限 |
| ±0÷±0 | N |
| ±無窮大÷±無窮大 | N |
| ±無窮大 × 0 | 楠 |
| NaN == NaN | 假 |
如您所見,浮點數比整數更加複雜,但對於現代計算來說它們非常必要。
整數與浮點速度

您可能想知道具有更高整數性能的處理器和具有更高性能的處理器哪個更好。 更高的性能 浮點數。這在過去很常見;現在已成為過去,但它仍然是一個有趣的問題。軟體性能將取決於它。
一般來說,您使用的許多常規應用程式會更頻繁地使用整數運算。然而,當涉及科學計算軟體、視訊遊戲、多媒體等時,浮點運算就變得更加重要。因此, 這在一定程度上取決於您使用的軟體。 更頻繁。
目前我們有 跳板 用每秒可執行的浮點計算次數來描述機器的效能。然而,這個單位對於超級運算或高效能運算 (HPC) 比家用運算更有效。
此外,您應該知道,如果需要的話,可以在兩者之間進行轉換,儘管這是另一個主題,我不會在這裡展開。
您還應該記住 說明 處理整數的指令通常需要較少的處理時間,而處理浮點指令可能需要更多週期才能完成。因此,要比較整數和浮點指令每個週期的指令數量並不容易。