關於php 位運算操作 字符串類型的數字產生的‘bug’

重點:在php中 字符(字符串)的位運算操作 是按照Ascii碼值來進行計算的

在進行位運算時 如果 其中有一個爲數字,則全部按照數字計算,如果都是字符串,則按照assic進行計算
如 “10”| 2 或者 “2” | 10
數字的位運算按照二進制操作

字符串的位運算規則如下
例如:
10|2 運算結果爲 10
“10”|“2” 運算結果爲:30
解析:
1. 將字符串"10"分割爲兩個字符 “1” 和 “0” ,轉化爲相應的Ascii碼值分別爲 49 和 48 則對應的二進制爲 00110001 和 00110000
2. 將字符串"2" 轉化爲相應的Ascii碼值爲 50 則對應的二進制爲 00110010
3. 因爲ascii碼以二進制8位一組 在進行運算時左對齊進行運算,後面不夠的補0(00000000爲字符串 null)
4. 相應計算如下
格式:二進制【Ascii->十進制】

字符串"10" 00110001 【49->1】 00110000【48->0】
字符串"10" 00110010 【50->2】 00000000【0->Null】
計算結果 00110011【51->3】 00110000【48->0】

計算出來的ascii值爲 51 和 48 分別對應字符串 “3” 和“0”即爲30

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