国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php位運(yùn)算用法詳細(xì)介紹

2024-05-04 21:57:45
字體:
供稿:網(wǎng)友

php位運(yùn)算在php中不常用到,但作用是相當(dāng)大的,下面我們來介紹一下php位運(yùn)算用法.

$a & $b and(按位與)

$a | $b or(按位或)

$a ^ $b Xor(按位異或)

~$a Not(按位非)

$a << $b Shift left(左移)

$a >> $b Shift right(右移)

詳解

$a & $b 按位與 把$a和$b中都為1的位設(shè)為1;

例:10 & 12 = 8

10 1010

12 1100

1000 8

$a | $b 按位或 把$a或$b中有一個為1的為設(shè)為1;

例:10 | 12 = 14

10 1010

12 1100

1110 14

$a ^ $b 按位異或

例:10 ^ 12

10 1010

12 1100

0110 6

~a 按位非 把$a中的為0的為設(shè)為1,1的為設(shè)為0

例:~10 =

10 1010 1111111111111111111111111111111111111111111111111111111111110101 -11

$a << $b 左移 把$a中的為向左移動$b次(每一次移動都表示乘以2);

例:1 << 10 = 1024

1(1) 左移10位 10000000000(1024)

相當(dāng)于1*2的10次方,php中沒有冪運(yùn)算真是郁悶.

$a >> $b 右移 把$a中的為向右移動$b次(每一次移動都表示除以2);

例:1024 << 2 = 1256

10000000000(1024) 右移2位就是 100000000(256)

php為運(yùn)算$a & $b and(按位與)$a | $b or(按位或)$a ^ $b Xor(按位異或)~$a Not(按位非)$a << $b Shift left(左移)$a >> $b Shift right(右移)

詳解$a & $b 按位與 把$a和$b中都為1的位設(shè)為1;例:10 & 12 = 810 101012 1100 1000 8

$a | $b 按位或 把$a或$b中有一個為1的為設(shè)為1;例:10 | 12 = 1410 101012 1100 1110 14

$a ^ $b 按位異或例:10 ^ 1210 101012 1100 0110 6

~a 按位非 把$a中的為0的為設(shè)為1,1的為設(shè)為0例:~10 = 10 1010 1111111111111111111111111111111111111111111111111111111111110101 -11

$a << $b 左移 把$a中的為向左移動$b次(每一次移動都表示乘以2);例:1 << 10 = 10241(1) 左移10位 10000000000(1024)相當(dāng)于1*2的10次方,php中沒有冪運(yùn)算真是郁悶.

$a >> $b 右移 把$a中的為向右移動$b次(每一次移動都表示除以2);例:1024 << 2 = 125610000000000(1024) 右移2位就是 100000000(256)

標(biāo)志位字段與位運(yùn)算符的結(jié)合

PHP里的error_reporting的參數(shù)值列表

value constant

1 E_ERROR

2 E_WARNING

4 E_PARSE

8 E_NOTICE

16 E_CORE_ERROR

32 E_CORE_WARNING

64 E_COMPILE_ERROR

128 E_COMPILE_WARNING

256 E_USER_ERROR

512 E_USER_WARNING

1024 E_USER_NOTICE

2047 E_ALL

2048 E_STRICT

4096 E_RECOVERABLE_ERROR

發(fā)現(xiàn)value的值都是跳躍式的吧,而且全是2的n+1次方.

再看下面這個.把value的值轉(zhuǎn)成二進(jìn)制了.

value constant

0000 0001 E_ERROR

0000 0010 E_WARNING

0000 0100 E_PARSE

0000 1000 E_NOTICE

0001 0000 E_CORE_ERROR

0010 0000 E_CORE_WARNING.

… …一次為每加一次方就是二進(jìn)制加了一位(學(xué)過計算機(jī)的差不多都知道:)…)

注意:每個選項(xiàng)對應(yīng)了一位(1為開啟 0為關(guān)閉)

好了,下面我們看看這么設(shè)置參數(shù)的好處.

舉三個參數(shù)為例來看是什么效果吧

error_reporting(3);//decbin(3) == 0000 0011; (相當(dāng)于設(shè)置 E_WARNING 和 E_ERROR )

error_reporting(4);//decbin(4) == 0000 0100;(相當(dāng)于設(shè)置 E_PARSE )

error_reporting(5);//decbin(5) == 0000 0101;(相當(dāng)于設(shè)置 E_PARSE 和 E_ERROR)

獲取設(shè)置:

要看某項(xiàng)是否開啟的判斷可以用位運(yùn)算來獲得(& — “與”規(guī)則 全1為1,否則為0)

//E_PARSE

if($n & 4){

//E_PARSE開啟

//4的二進(jìn)制是 0100,因?yàn)橹挥械?位是1,所以進(jìn)行”&”操作時其它何位置全被置0了

//因此只有$n的第三位也是1時結(jié)果才會大于0.

//如4(0100),5(0101),6(0110),7(0111)

}else{

//E_PARSE關(guān)閉

//第三位為0了就代表此選項(xiàng)是關(guān)閉狀態(tài)

}

改變設(shè)置:($n代表當(dāng)前的十進(jìn)制值)

在應(yīng)用時我們可能跟據(jù)需要針對某位進(jìn)行開關(guān)設(shè)置.

看下面的用法.

//關(guān)閉E_PARSE項(xiàng) 用 ‘&’“與”規(guī)則

$n = $n&(8192-4-1);

//為什么用8191呢?

//這和你的選項(xiàng)數(shù)有關(guān)系,這個錯誤顯示標(biāo)記一共用了13位(4096的二進(jìn)制是13位),而8192是(14位).

//為什么減4減1呢?

//8192-4-1=8187.(1111111111011)二進(jìn)制是13位了,與我們用到的最大位數(shù)一樣了.而且對應(yīng)的第三位上的值是0了.

//用這個數(shù)去和1到4096之間任何一個數(shù)按位“與”運(yùn)算,是不是除了第三位會置0,其它位上的值不會變化呢? ”與”規(guī)則 :)

//同理,想關(guān)掉 E_WARNING

//$n = $n&(8192-2-1);

//開啟E_PARSE項(xiàng)用到‘|’“或”規(guī)則

//$n = $n|4;

//看了上面的關(guān)閉,對于開啟有點(diǎn)想法兒了吧:)

// ‘|’ — “或”規(guī)則 有1為1 否則為0

//上面是所有位為1的情況下不影響其它位,現(xiàn)在則變成所有位為0的情況下不會影響其它位了:)

//所以我們只要把后面的操作數(shù)的二進(jìn)制位相應(yīng)的值置1,其它所有位置0就OK了.

//發(fā)現(xiàn)了嗎?正好是我們每個設(shè)置項(xiàng)對應(yīng)的十進(jìn)制數(shù)值:)

思路就是這樣了,如果想同時操作多個位上的設(shè)置值也可以,就看你的操作數(shù)怎么設(shè)置了.

以后開發(fā)中遇到需要一個參數(shù)同時設(shè)置多個選項(xiàng)的情況時我們就可以考慮一下這個方法了:)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 菏泽市| 朝阳县| 博野县| 奈曼旗| 沈阳市| 堆龙德庆县| 林芝县| 蒲城县| 离岛区| 饶阳县| 石狮市| 太湖县| 北票市| 全椒县| 贞丰县| 依兰县| 六盘水市| 婺源县| 长乐市| 濮阳市| 古丈县| 兴海县| 灌云县| 罗源县| 巴林左旗| 辉南县| 屏边| 卢湾区| 中西区| 福泉市| 安图县| 永济市| 公安县| 泗洪县| 昌吉市| 大丰市| 阿拉善盟| 桐城市| 双江| 冕宁县| 洛阳市|