您好,登錄后才能下訂單哦!
PHP的數據類型
· 標量類型: int, float, string, bool
· 復合類型: array, object
· 特殊類型: null, resouce
· 十進制寫法:123:
$n1 = 123;
· 八進制寫法: 0123
$n2 = 0123;
· 十六進制寫法: 0x123
$n3 = 0x123;
先學習幾個單詞:
dec: 十進制
bin:二進制
oct:八進制
hex:十六進制
· 十進制轉二進制decbin(),除2取余倒著寫
$v1 = decbin(123); //注意:參數必須是10進制數字,轉換后的結果必然是二進制字符串。
我們也可以通過手工的方式來完成10進制轉2進制的完整過程。
基本做法是:將10進制數字除以2,并取得余數,如果除得的商不為0,則繼續除以2,并繼續去的余數,直到商為0。然后將所有取得的余數,按“倒序寫出”,就是對應的2進制數字:
· 十進制轉八進制decoct(),除8取余倒著寫
使用php系統函數:
$r1 = decoct(十進制數字); //結果是一個8進制數字字符串。
我們也可以通過手工的方式來完成10進制轉8進制的完整過程。
基本做法是:將10進制數字除以8,并取得余數,如果除得的商不為0,則繼續除以8,并繼續去的余數,直到商為0。然后將所有取得的余數,按“倒序寫出”,就是對應的8進制數字:
· 十進制轉十六進制dechex(),除16取余倒著寫
16進制的數字包括如下(從0開始):
0 1 2 3 4 5 6 7 8 9 A B C D E F
對應10進制其實是:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
系統函是:dechex(十進制數字),結果是16進制數字字符串。
手工運算:
基本做法是:將10進制數字除以16,并取得余數,如果除得的商不為0,則繼續除以16,并繼續去的余數,直到商為0。然后將所有取得的余數,按“倒序寫出”,就是對應的16進制數字:
· 二進制轉十進制bindec(),每位數值乘以2的權值然后相加
先理解一個“權值”概念:
就是某位數字上的該數字所代表的數的大小。比如:
10進制數字1234,其代表:1*10 3+2*102 + 3*101 +4*100 = 1000+ 200 + 30 + 4;
這里,10 3, 102,101,等等,就稱為權值。
二進制轉10進制,就是將每位數值乘以對應位上的權值,然后相加得到的結果。
用系統函數是:
$v1 = bindec(“二進制數字字符串”) ;//得到的結果是10進制數字
結果:s1 = 86 , 其類型為:integer
手工轉換:
二進制數字的權值,從右到左,分別是:
20, 21, 22, 23, 24, 25,.....
即分別是(10進制大小):
1, 2, 4, 8, 16,32
手工計算:
1010110
=1*26 + 0*XX + 1*24 + 0*XX + 1*22 + 1*21 + 0 //說明,其中XX表示無所謂的數字值
=64 + 0 + 16 + 0 + 4 + 2 + 0
=86
· 八進制轉十進制octdec() ,每位數值乘以8的權值然后相加
用系統函數是:
$v1 = octdec(“8進制數字字符串”) ;//得到的結果是10進制數字
結果:s1 = 668,其類型為:integer
手工算法統2進制轉換為10進制,略。
· 十六進制轉十進制hexdec() ,每位數值乘以16的權值然后相加
用系統函數是:
$v1 = hexdec(“16進制數字字符串”) ;//得到的結果是10進制數字
結果:s1 = 4779,其類型為:integer
· 注意:十進制轉為其他進制結果是字符串,其他進制轉為十進制要求給定數據是字符串形式
思考:
$v1 = bindec(123);//理解過程:bindec(“123”) =>bindec(“1”)=>1
$v2 = bindec(0123);//理解:0123是8進制數字,其10進制值為:83,再當作二進制字符串就是“83”,結果就只能是0
$v3 = bindec(“0123”);//理解:因為直接就是字符串了,就當二進制字符串用,結果是1
$v4 = octdec(0123); //理解:0123是8進制數字,其10進制值為:83,再當作8進制字符串就是“83”,但8進制中沒有“8”這個數字,就只識別出一個“3”這個數字
以下代碼測試:
$v1 = 1.234; //帶小數點,,就是浮點類型
$v2 = 1.234E3;//含義是:1.234乘以10的3次方,即1234,帶E的形式就是浮點數
$v3 = 1234E3;//結果值是1234000,但也是一個浮點數。
關于浮點數的細節知識:
十進制小數轉二進制小數的做法:乘2并順序取整數部分
浮點數不應該直接進行大小比較。因為浮點數在系統內部(CPU級別),很可能都是不精確表達。要想進行比較,我們只能考慮自己應用中的精度要求的基礎上,將其轉換為整數進行比較。
通常的做法是:乘以10的精度位數數次方,比如精度要求3位有效數字,則乘以10的3次方。
當整數運算的結果超出整數的范圍后,會自動轉換為浮點數。
整數的范圍在32位操作系統下,大約正負20多億。
字符串類型 String
JS中雖然有2種字符串表達形式,但也應該理解為是一種字符串:
var str1 = '單引號字符串';
var str2 = "雙引號字符串";
但在php中,單引號與雙引號字符串是有不同細節含義的字符串:
PHP中有4種字符串形式:
單引號字符串:
雙引號字符串:
nowdoc(單引號)定界符字符串:
heredoc(雙引號)定界符字符串:
布爾類型:bool , boolean
用于標識某種只有兩個狀態值的數據:true , false
在應用中,我們常常會(需要)直接將一個數據(可能是各種其它類型)當作一個布爾值來進行判斷。
那么此時其實發生的是:會將數據隱含轉換為布爾值。
最常見的語法形式是:
if(某數據/變量) {
...........
}
那么,在php中,其它各種數據,隱含轉換為布爾值的時候,會當作false的有:0 , 0.0 ,null , "", "" , "0" , array() , 及未定義的變量。其它數據當作true!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。