指數(乘方、冪、科學計數法)、對數、等比數列、階乘基礎知識

指數

指數、冪:乘方、次方。a的n次方,a的n次冪,a^n。數學計算爲n自乘m次。其中n稱作底數,m稱作指數。

n^0= 1;     n^1=1*n;     n^2=1*n*n

科學計數法:a*(10^n),aEn。將一個比較大的數,計作一個自然數a乘以10的n次冪,其中1<=|a|<10。科學計數法,使得閱讀更直觀,避免出錯。

因爲十的乘方很容易計算,只需在後面加零即可,因此科學計數法藉助此簡化記錄數的方式。在計算機中,二的乘方很有用。

對數

如果a^X=N,那麼x就是以a爲底,N的對數。計作log(a)N,其中a爲底數,N爲真數。

以10爲底的對數,叫做常用對數(common logathimath),log(10)N 即 lgN。

以無理數e爲底的對數,叫做自然對數(natrual logarithm),log(e)N即lnN。

e:我們都知道複利計息是怎麼回事,就是利息也可以並進本金再生利息。但是本利和的多寡,要看計息週期而定,以年週期來算的話,可以一年只計息一次,也可以每半年計息一次,或者一季一次,一月一次,甚至一天一次;當然計息週期愈短,本利和就會愈高。有人因此而好奇,如果計息週期無限制地縮短,比如說每分鐘計息一次,甚至每秒,或者每一瞬間(理論上來說),會發生什麼狀況?本利和會無限制地加大嗎?答案是不會,本利和的值會穩定下來,趨近於一極限值,而e這個數就現身在該極限值當中,所以e可以定義成一個極限值,但是在那時候,根本還沒有極限的觀念,因此e的值應該是觀察出來的,而不是用嚴謹的證明得到的。

當n→∞時,(1+1/n)^n的極限就是e

階乘

從1乘到n,稱爲n的階乘。計作 n! = 1*2*3*...*(n-1)*n。

n! = (n-1)! * n;

等比數列

an = a * q^(n-1)

sn = a * (q^n - 1) / (q-1)

例如:數列,2^0  2^1  2^2  2^3 ....  2^(n-1),

          即爲 q = 2, a = 1的等比數列,其sn=2^n -1;

 

 

十六進制

在數學中是逢16進1的進位制,用0-9和A-F表示,這些數字稱作16進制數字。

十進制數57,二進制數爲111001,十六進制數爲39。

16進制普遍應用在計算機領域,因爲將4個bit化成16進制的數比較容易。

Unicode字符集及其編碼實現

Unicode用數字 0x0~0x10FFFF 表示所有字符,所以最多可以容納 1,114,112 個字符。

有人會說,Unicode不是兩個字節表示字符的碼?爲什麼數值可以到0x10FFFF,這不21位,兩個半字節還多了嗎?其實,這是混淆了Unicode的數值定義和實現,這根本就是兩個概念,Unicode到底用幾個字節表示,取決於其實現方式是UTF-8,UTF-16,還是UTF-32.

  比如,“漢字”對應的Unicode值是0x6c49和0x5b57,而編碼實現是:

char data_utf8[]={0xE6,0xB1,0x89,0xE5,0xAD,0x97};//UTF-8編碼
char16_t data_utf16[]={0x6C49,0x5B57};        //UTF-16編碼
char32_t data_utf32[]={0x00006C49,0x00005B57};//UTF-32編碼

UTF-8是使用8-bit爲單位,對Unicode進行編碼的。特點是,對不同範圍的字符使用不同長度的編碼。

Unicode編碼(十六進制) 
UTF-8 字節流(二進制)
00000000 - 0000007F
0xxxxxxx
00000080 - 000007FF
110xxxxx 10xxxxxx
00000800 - 0000FFFF
1110xxxx 10xxxxxx 10xxxxxx
00010000 - 001FFFFF
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000 - 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000 - 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

 

  UTF-8編碼的最大長度是6個字節。

  對於0x00-0x7F之間的字符,UTF-8編碼與ASCII編碼完全相同,用1個字節表示,首位爲0。

  對於0x80-0x7FF之間的字符,用2個字節表示,第一個字節前三位“110”爲標誌位,第二個字節前兩位“10”爲標誌位。剩下的11位用來表示Unicode值(7FF最多11位)。

  同樣,UTF-8的3個字節,可以表示0x800-0xFFFF的Unicode(最多16位)。

  UTF-8的4個字節,可以表示0x10000-0x001FFFFF的Unicode(最多21位)。

  4個字節以內,已經包含了Unicode所有字符。

  5、6個字節表示的已經是非Unicode編碼範圍,屬於UCS-4 編碼。早期UTF-8規範也可以達到6字節序列,不過2003年11月UTF-8 被 RFC 3629 重新規範,只能使用原來Unicode定義的區域, U+0000到U+10FFFF。根據規範,這些字節值將無法出現在合法 UTF-8序列中。

  例1:“漢”字的Unicode編碼是0x6C49。0x6C49在0x0800-0xFFFF之間,使用用3字節模板了:1110xxxx 10xxxxxx 10xxxxxx。將0x6C49寫成二進制是:0110 1100 0100 1001, 用這個比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
  例2:Unicode編碼0x20C30在0x010000-0x10FFFF之間,使用用4字節模板了:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。將0x20C30寫成21位二進制數字(不足21位就在前面補0):0 0010 0000 1100 0011 0000,用這個比特流依次代替模板中的x,得到:11110000 10100000 10110000 10110000,即F0 A0 B0 B0。

  UTF-8有兩個好處:

1. 1字節字符、2字節字符、3字節字符……的首字節標誌位不同,這樣可以很清楚的區分一個字節屬於1字節字符還是2字節字符,如果一個字節流傳輸中出現錯誤,也不會錯位,隻影響部分字符,根據標誌位,很容易找到下個正確字符。

2. 兼容ASCII碼,英美字符用UTF-8可以一個字節表示,所以,www組織選用UTF-8作爲推薦編碼格式。2007年,在互聯網上,UTF-8格式已經超過了ASCII碼。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章