指数(乘方、幂、科学计数法)、对数、等比数列、阶乘基础知识

指数

指数、幂:乘方、次方。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码。

 

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