PHP的數(shù)據(jù)類型
網(wǎng)站設(shè)計、成都網(wǎng)站制作的關(guān)注點不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)公司一個展示的機會來證明自己,這并不會花費您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。
· 標(biāo)量類型: int, float, string, bool
· 復(fù)合類型: array, object
· 特殊類型: null, resouce
· 十進制寫法:123:
$n1 = 123;
· 八進制寫法: 0123
$n2 = 0123;
· 十六進制寫法: 0x123
$n3 = 0x123;
先學(xué)習(xí)幾個單詞:
dec: 十進制
bin:二進制
oct:八進制
hex:十六進制
· 十進制轉(zhuǎn)二進制decbin(),除2取余倒著寫
$v1 = decbin(123); //注意:參數(shù)必須是10進制數(shù)字,轉(zhuǎn)換后的結(jié)果必然是二進制字符串。
我們也可以通過手工的方式來完成10進制轉(zhuǎn)2進制的完整過程。
基本做法是:將10進制數(shù)字除以2,并取得余數(shù),如果除得的商不為0,則繼續(xù)除以2,并繼續(xù)去的余數(shù),直到商為0。然后將所有取得的余數(shù),按“倒序?qū)懗觥?,就是對?yīng)的2進制數(shù)字:
· 十進制轉(zhuǎn)八進制decoct(),除8取余倒著寫
使用php系統(tǒng)函數(shù):
$r1 = decoct(十進制數(shù)字); //結(jié)果是一個8進制數(shù)字字符串。
我們也可以通過手工的方式來完成10進制轉(zhuǎn)8進制的完整過程。
基本做法是:將10進制數(shù)字除以8,并取得余數(shù),如果除得的商不為0,則繼續(xù)除以8,并繼續(xù)去的余數(shù),直到商為0。然后將所有取得的余數(shù),按“倒序?qū)懗觥保褪菍?yīng)的8進制數(shù)字:
· 十進制轉(zhuǎn)十六進制dechex(),除16取余倒著寫
16進制的數(shù)字包括如下(從0開始):
0 1 2 3 4 5 6 7 8 9 A B C D E F
對應(yīng)10進制其實是:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
系統(tǒng)函是:dechex(十進制數(shù)字),結(jié)果是16進制數(shù)字字符串。
手工運算:
基本做法是:將10進制數(shù)字除以16,并取得余數(shù),如果除得的商不為0,則繼續(xù)除以16,并繼續(xù)去的余數(shù),直到商為0。然后將所有取得的余數(shù),按“倒序?qū)懗觥?,就是對?yīng)的16進制數(shù)字:
· 二進制轉(zhuǎn)十進制bindec(),每位數(shù)值乘以2的權(quán)值然后相加
先理解一個“權(quán)值”概念:
就是某位數(shù)字上的該數(shù)字所代表的數(shù)的大小。比如:
10進制數(shù)字1234,其代表:1*10 3+2*102 + 3*101 +4*100 = 1000+ 200 + 30 + 4;
這里,10 3, 102,101,等等,就稱為權(quán)值。
二進制轉(zhuǎn)10進制,就是將每位數(shù)值乘以對應(yīng)位上的權(quán)值,然后相加得到的結(jié)果。
用系統(tǒng)函數(shù)是:
$v1 = bindec(“二進制數(shù)字字符串”);//得到的結(jié)果是10進制數(shù)字
結(jié)果:s1 = 86 , 其類型為:integer
手工轉(zhuǎn)換:
二進制數(shù)字的權(quán)值,從右到左,分別是:
20, 21, 22, 23, 24, 25,.....
即分別是(10進制大?。?/p>
1, 2, 4, 8, 16,32
手工計算:
1010110
=1*26 + 0*XX + 1*24 + 0*XX + 1*22 + 1*21 + 0 //說明,其中XX表示無所謂的數(shù)字值
=64 + 0 + 16 + 0 + 4 + 2 + 0
=86
· 八進制轉(zhuǎn)十進制octdec() ,每位數(shù)值乘以8的權(quán)值然后相加
用系統(tǒng)函數(shù)是:
$v1 = octdec(“8進制數(shù)字字符串”);//得到的結(jié)果是10進制數(shù)字
結(jié)果:s1 = 668,其類型為:integer
手工算法統(tǒng)2進制轉(zhuǎn)換為10進制,略。
· 十六進制轉(zhuǎn)十進制hexdec() ,每位數(shù)值乘以16的權(quán)值然后相加
用系統(tǒng)函數(shù)是:
$v1 = hexdec(“16進制數(shù)字字符串”);//得到的結(jié)果是10進制數(shù)字
結(jié)果:s1 = 4779,其類型為:integer
· 注意:十進制轉(zhuǎn)為其他進制結(jié)果是字符串,其他進制轉(zhuǎn)為十進制要求給定數(shù)據(jù)是字符串形式
思考:
$v1 = bindec(123);//理解過程:bindec(“123”) =>bindec(“1”)=>1
$v2 = bindec(0123);//理解:0123是8進制數(shù)字,其10進制值為:83,再當(dāng)作二進制字符串就是“83”,結(jié)果就只能是0
$v3 = bindec(“0123”);//理解:因為直接就是字符串了,就當(dāng)二進制字符串用,結(jié)果是1
$v4 = octdec(0123); //理解:0123是8進制數(shù)字,其10進制值為:83,再當(dāng)作8進制字符串就是“83”,但8進制中沒有“8”這個數(shù)字,就只識別出一個“3”這個數(shù)字
以下代碼測試:
$v1 = 1.234; //帶小數(shù)點,,就是浮點類型
$v2 = 1.234E3;//含義是:1.234乘以10的3次方,即1234,帶E的形式就是浮點數(shù)
$v3 = 1234E3;//結(jié)果值是1234000,但也是一個浮點數(shù)。
關(guān)于浮點數(shù)的細節(jié)知識:
十進制小數(shù)轉(zhuǎn)二進制小數(shù)的做法:乘2并順序取整數(shù)部分
浮點數(shù)不應(yīng)該直接進行大小比較。因為浮點數(shù)在系統(tǒng)內(nèi)部(CPU級別),很可能都是不精確表達。要想進行比較,我們只能考慮自己應(yīng)用中的精度要求的基礎(chǔ)上,將其轉(zhuǎn)換為整數(shù)進行比較。
通常的做法是:乘以10的精度位數(shù)數(shù)次方,比如精度要求3位有效數(shù)字,則乘以10的3次方。
當(dāng)整數(shù)運算的結(jié)果超出整數(shù)的范圍后,會自動轉(zhuǎn)換為浮點數(shù)。
整數(shù)的范圍在32位操作系統(tǒng)下,大約正負20多億。
字符串類型 String
JS中雖然有2種字符串表達形式,但也應(yīng)該理解為是一種字符串:
var str1 = '單引號字符串';
var str2 = "雙引號字符串";
但在php中,單引號與雙引號字符串是有不同細節(jié)含義的字符串:
PHP中有4種字符串形式:
單引號字符串:
雙引號字符串:
nowdoc(單引號)定界符字符串:
heredoc(雙引號)定界符字符串:
布爾類型:bool , boolean
用于標(biāo)識某種只有兩個狀態(tài)值的數(shù)據(jù):true , false
在應(yīng)用中,我們常常會(需要)直接將一個數(shù)據(jù)(可能是各種其它類型)當(dāng)作一個布爾值來進行判斷。
那么此時其實發(fā)生的是:會將數(shù)據(jù)隱含轉(zhuǎn)換為布爾值。
最常見的語法形式是:
if(某數(shù)據(jù)/變量) {
...........
}
那么,在php中,其它各種數(shù)據(jù),隱含轉(zhuǎn)換為布爾值的時候,會當(dāng)作false的有:0 , 0.0 ,null , "", "" , "0" , array() , 及未定義的變量。其它數(shù)據(jù)當(dāng)作true!