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

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