iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

30天重新認識C++系列 第 7

第七天: C++ 基本認識 (四)

  • 分享至 

  • xImage
  •  

今天就接著來看浮點數的部分吧~

浮點數

C++ 浮點數類別有以下幾種: float, double

沿用一下昨天的表:

類型名稱 位元組(byte) 範圍
float 4 3.4E +/- 38 (7 digits)
double 8 1.7E +/- 308 (15 digits)

C++的浮點數是使用IEEE 754,中文全稱 二進位浮點數算術標準

下面就來簡單看一下到底有小數點的數值怎麼被表示在記憶體中。

IEEE 754 裡面有四種表示浮點數值的方式:

  • 單精確度(32 位元)
  • 雙精確度(64 位元)
  • 延伸單精確度(43 位元以上,很少使用)
  • 延伸雙精確度(79 位元以上,通常以 80 位元實做)

但ㄧ般的情境下,主要都是使用單精確度,所以以單精確度來看。

浮點數的表示: 浮點數 (Value) = 符號位 (Sign bit) 乘以 指數偏移值 (exponent bias) 乘以 分數值 (fraction)

符號位(sign bit): 用來判斷正負值,正數為 0,負數為 1

指數偏移值(exponent): 以單精確度的表示式來看,指數域是用 8 位元來表示,IEEE 754 標準規定的固定值為 [2 的 e - 1 次方 - 1] (e 為儲存指數的位元長度,故 e=8),所以在單精確度中固定偏移值就是 127(二進位為 1000 0000)。

分數值(fraction): 存放小數點以下的值(2 進位)

這邊用 12.5(10)來看 float 怎麼運作:

  1. 12.5 = 12 + 0.5 = 1100.1(2) 十進位小數如何轉換為二進位
    讓小數點往左移到最高位前 1 位,1.1001,去掉最高位 1,分數值就是 1001,因為單精確度小數有 23 位元,剩下的就補 0。
  2. 小數點往前移 3,代表指數要+3,所以就是 127+3=130 => 1000 0010
  3. 正數,符號位為 0
float sign bit exponent fraction
12.5 0 1000 0010 100 1000 0000 0000 0000 0000

空類型

之前提到的 C++ 基本資料型態忘了還有空類型(Void),這邊就來簡單看看囉~

void 類型: 可以代表一種未知的類型(就是一種抽象的表達,物件概念中的抽象類別,之後會提到這部分)

void*: 無類型指針,有個這個指針的部分,後面會提到。

void 類型函數: 這邊就先簡單看一下 void 函數的部分,他會有以下兩種用處

  1. 對函數返回值的限定
  2. 對函數參數的限定
#include <iostream>
using namespace std;

void empty(void) {
	cout << "I am void";
}

int main()
{
	empty();
}

註解

註解主要是用來補充除了程式語言以外的內容,像是為什麼會有這段程式碼,在 C++中有兩種註解的方式

  • 單行註解
// 我是單行
  • 多行註解
/*
我是多行
*/

終於在今天把基本資料類型認識完了,明天要來認識一些基本運算子~

參考資料

IT 鐵人賽前輩文章
IEEE 浮點數詳解
C++ 空類型


上一篇
第六天: C++ 基本認識 (三)
下一篇
第八天: C++ 基本認識 (五)
系列文
30天重新認識C++30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言