多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > php位運算用法詳細介紹

php位運算用法詳細介紹

來源:程序員人生   發布時間:2014-06-19 15:26:12 閱讀次數:4016次

php位運算在php中不常用到,但作用是相當大的,下面我們來介紹一下php位運算用法.

$a & $b and(按位與)

$a | $b or(按位或)

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

~$a Not(按位非)

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

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

詳解

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

例:10 & 12 = 8

10 1010

12 1100

1000 8

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

例:10 | 12 = 14

10 1010

12 1100

1110 14

$a ^ $b 按位異或

例:10 ^ 12

10 1010

12 1100

0110 6

~a 按位非 把$a中的為0的為設為1,1的為設為0

例:~10 =

10 1010 1111111111111111111111111111111111111111111111111111111111110101 -11

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

例:1 << 10 = 1024

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

相當于1*2的10次方,php中沒有冪運算真是郁悶.

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

例:1024 << 2 = 1256

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

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

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

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

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

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

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

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

標志位字段與位運算符的結合

PHP里的error_reporting的參數值列表

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

發現value的值都是跳躍式的吧,而且全是2的n+1次方.

再看下面這個.把value的值轉成二進制了.

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.

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

注意:每個選項對應了一位(1為開啟 0為關閉)

好了,下面我們看看這么設置參數的好處.

舉三個參數為例來看是什么效果吧

error_reporting(3);//decbin(3) == 0000 0011; (相當于設置 E_WARNING 和 E_ERROR )

error_reporting(4);//decbin(4) == 0000 0100;(相當于設置 E_PARSE )

error_reporting(5);//decbin(5) == 0000 0101;(相當于設置 E_PARSE 和 E_ERROR)

獲取設置:

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

//E_PARSE

if($n & 4){

//E_PARSE開啟

//4的二進制是 0100,因為只有第3位是1,所以進行”&”操作時其它何位置全被置0了

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

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

}else{

//E_PARSE關閉

//第三位為0了就代表此選項是關閉狀態

}

改變設置:($n代表當前的十進制值)

在應用時我們可能跟據需要針對某位進行開關設置.

看下面的用法.

//關閉E_PARSE項 用 ‘&’“與”規則

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

//為什么用8191呢?

//這和你的選項數有關系,這個錯誤顯示標記一共用了13位(4096的二進制是13位),而8192是(14位).

//為什么減4減1呢?

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

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

//同理,想關掉 E_WARNING

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

//開啟E_PARSE項用到‘|’“或”規則

//$n = $n|4;

//看了上面的關閉,對于開啟有點想法兒了吧:)

// ‘|’ — “或”規則 有1為1 否則為0

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

//所以我們只要把后面的操作數的二進制位相應的值置1,其它所有位置0就OK了.

//發現了嗎?正好是我們每個設置項對應的十進制數值:)

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

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲 欧美精品 | 91精品国产综合久久久久久 | 亚洲另类春色小说 | 性欧美性另类双性人互交 | 欧美激情亚洲 | 国产精品久久久久久久免费大片 | 最近高清中文在线国语视频 | 中文字幕在线播放第一页 | 日韩爱爱视频 | 亚洲tv精品一区二区三区 | 一二三四观看在线视频中文 | 亚洲另类图| 18一19xxx日本护士 | 免费一级欧美毛片 | 伊人久久成人爱综合网 | 天堂俺去俺来也www久久婷婷 | 在线亚洲欧洲福利视频 | 精品亚洲欧美高清不卡高清 | 久久艹精品| 精品久久久中文字幕一区 | 亚洲成年网站在线777 | 欧美一区二区三区不卡视频 | 日本免费大黄在线观看 | 国产成人精品曰本亚洲 | 最近中文字幕免费完整国语 | 久久精品7| 精产国品一区 | 自拍偷拍图区 | 亚洲国产精品二区久久 | 国产成人综合手机在线播放 | freexxx性欧美hd丝袜 | 最新国产福利在线观看 | 欧美成人午夜片一一在线观看 | 欧美日韩在线精品成人综合网 | 中文字幕在线观看一区二区三区 | 欧美巨尻| 一区二区三区不卡在线观看 | 欧美最猛黑人xxxx黑人 | 666永久视频在线 | 成年人在线视频网站 | 亚洲精品久久久久久久网站 |