指數
指數、冪:乘方、次方。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碼。