日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

PHP基礎(chǔ)之運算符4——位運算符

瀏覽:23日期:2022-09-14 14:39:37

位運算符允許對整型數(shù)中指定的位進行求值和操作。

位運算符例子名稱結(jié)果$a & $bAnd(按位與)將把?$a?和?$b?中都為 1 的位設(shè)為 1。$a | $bOr(按位同或)將把?$a?和?$b?中任何一個為 1 的位設(shè)為 1。$a ^ $bXor(按位異或)將把?$a?和?$b?中一個為 1 另一個為 0 的位設(shè)為 1。~ $aNot(按位取反)將?$a?中為 0 的位設(shè)為 1,反之亦然。$a << $bShift left(左移)將?$a?中的位向左移動?$b?次(每一次移動都表示“乘以 2”)。$a >> $bShift right(右移)將?$a?中的位向右移動?$b?次(每一次移動都表示“除以 2”)。

位移在 PHP 中是數(shù)學(xué)運算。向任何方向移出去的位都被丟棄。左移時右側(cè)以零填充,符號位被移走意味著正負(fù)號不被保留。右移時左側(cè)以符號位填充,意味著正負(fù)號被保留。

要用括號確保想要的優(yōu)先級。例如?$a & $b == true?先進行比較再進行按位與;而?($a & $b) == true?則先進行按位與再進行比較。

要注意數(shù)據(jù)類型的轉(zhuǎn)換。如果左右參數(shù)都是字符串,則位運算符將對字符的 ASCII 值進行操作。PHP 的 ini 設(shè)定 error_reporting 使用了按位的值,提供了關(guān)閉某個位的真實例子。要顯示除了提示級別之外的所有錯誤,php.ini 中是這樣用的:E_ALL & ~E_NOTICE

具體運作方式是先取得 E_ALL 的值:00000000000000000111011111111111再取得 E_NOTICE 的值:00000000000000000000000000001000然后通過 ~ 將其取反:11111111111111111111111111110111最后再用按位與 AND(&)得到兩個值中都設(shè)定了(為 1)的位:00000000000000000111011111110111

另外一個方法是用按位異或 XOR(^)來取得只在其中一個值中設(shè)定了的位:E_ALL ^ E_NOTICEerror_reporting 也可用來演示怎樣置位。只顯示錯誤和可恢復(fù)錯誤的方法是:E_ERROR | E_RECOVERABLE_ERROR

也就是將 E_ERROR00000000000000000000000000000001和 E_RECOVERABLE_ERROR00000000000000000001000000000000用按位或 OR(|)運算符來取得在任何一個值中被置位的結(jié)果:00000000000000000001000000000001

Example #1 整數(shù)的 AND,OR 和 XOR 位運算符

<?php/**?Ignore?the?top?section,*?it?is?just?formatting?to?make?output?clearer.*/$format?=?’(%1$2d?=?%1$04b)?=?(%2$2d?=?%2$04b)’.?’?%3$s?(%4$2d?=?%4$04b)’?.?'n';echo?<<<EOH---------?????---------??--?---------result????????value??????op?test---------?????---------??--?---------EOH;/**?Here?are?the?examples.*/$values?=?array(0,?1,?2,?4,?8);$test?=?1?+?4;echo?'n?Bitwise?AND?n';foreach?($values?as?$value)?{$result?=?$value?&?$test;printf($format,?$result,?$value,?’&’,?$test);}echo?'n?Bitwise?Inclusive?OR?n';foreach?($values?as?$value)?{$result?=?$value?|?$test;printf($format,?$result,?$value,?’|’,?$test);}echo?'n?Bitwise?Exclusive?OR?(XOR)?n';foreach?($values?as?$value)?{$result?=?$value?^?$test;printf($format,?$result,?$value,?’^’,?$test);}?>

以上例程會輸出:

--------- --------- -- --------- resultvalue op test --------- --------- -- --------- Bitwise AND( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101) Bitwise Inclusive OR( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)(13 = 1101) = ( 8 = 1000) | ( 5 = 0101) Bitwise Exclusive OR (XOR)( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

Example #2 字符串的 XOR 運算符

<?phpecho?12?^?9;?//?Outputs?’5’echo?'12'?^?'9';?//?Outputs?the?Backspace?character?(ascii?8)//?(’1’?(ascii?49))?^?(’9’?(ascii?57))?=?#8echo?'hallo'?^?'hello';?//?Outputs?the?ascii?values?#0?#4?#0?#0?#0//?’a’?^?’e’?=?#4echo?2?^?'3';?//?Outputs?1//?2?^?((int)'3')?==?1echo?'2'?^?3;?//?Outputs?1//?((int)'2')?^?3?==?1?>

Example #3 整數(shù)的位移

<?php/**?Here?are?the?examples.*/echo?'n---?BIT?SHIFT?RIGHT?ON?POSITIVE?INTEGERS?---n';$val?=?4;$places?=?1;$res?=?$val?>>?$places;p($res,?$val,?’>>’,?$places,?’copy?of?sign?bit?shifted?into?left?side’);$val?=?4;$places?=?2;$res?=?$val?>>?$places;p($res,?$val,?’>>’,?$places);$val?=?4;$places?=?3;$res?=?$val?>>?$places;p($res,?$val,?’>>’,?$places,?’bits?shift?out?right?side’);$val?=?4;$places?=?4;$res?=?$val?>>?$places;p($res,?$val,?’>>’,?$places,?’same?result?as?above;?can?not?shift?beyond?0’);echo?'n---?BIT?SHIFT?RIGHT?ON?NEGATIVE?INTEGERS?---n';$val?=?-4;$places?=?1;$res?=?$val?>>?$places;p($res,?$val,?’>>’,?$places,?’copy?of?sign?bit?shifted?into?left?side’);$val?=?-4;$places?=?2;$res?=?$val?>>?$places;p($res,?$val,?’>>’,?$places,?’bits?shift?out?right?side’);$val?=?-4;$places?=?3;$res?=?$val?>>?$places;p($res,?$val,?’>>’,?$places,?’same?result?as?above;?can?not?shift?beyond?-1’);echo?'n---?BIT?SHIFT?LEFT?ON?POSITIVE?INTEGERS?---n';$val?=?4;$places?=?1;$res?=?$val?<<?$places;p($res,?$val,?’<<’,?$places,?’zeros?fill?in?right?side’);$val?=?4;$places?=?(PHP_INT_SIZE?*?8)?-?4;$res?=?$val?<<?$places;p($res,?$val,?’<<’,?$places);$val?=?4;$places?=?(PHP_INT_SIZE?*?8)?-?3;$res?=?$val?<<?$places;p($res,?$val,?’<<’,?$places,?’sign?bits?get?shifted?out’);$val?=?4;$places?=?(PHP_INT_SIZE?*?8)?-?2;$res?=?$val?<<?$places;p($res,?$val,?’<<’,?$places,?’bits?shift?out?left?side’);echo?'n---?BIT?SHIFT?LEFT?ON?NEGATIVE?INTEGERS?---n';$val?=?-4;$places?=?1;$res?=?$val?<<?$places;p($res,?$val,?’<<’,?$places,?’zeros?fill?in?right?side’);$val?=?-4;$places?=?(PHP_INT_SIZE?*?8)?-?3;$res?=?$val?<<?$places;p($res,?$val,?’<<’,?$places);$val?=?-4;$places?=?(PHP_INT_SIZE?*?8)?-?2;$res?=?$val?<<?$places;p($res,?$val,?’<<’,?$places,?’bits?shift?out?left?side,?including?sign?bit’);/**?Ignore?this?bottom?section,*?it?is?just?formatting?to?make?output?clearer.*/function?p($res,?$val,?$op,?$places,?$note?=?’’)?{$format?=?’%0’?.?(PHP_INT_SIZE?*?8)?.?'bn';printf('Expression:?%d?=?%d?%s?%dn',?$res,?$val,?$op,?$places);echo?'?Decimal:n';printf('??val=%dn',?$val);printf('??res=%dn',?$res);echo?'?Binary:n';printf(’??val=’?.?$format,?$val);printf(’??res=’?.?$format,?$res);if?($note)?{echo?'?NOTE:?$noten';}echo?'n';}?>

以上例程在 32 位機器上的輸出:

--- BIT SHIFT RIGHT ON POSITIVE INTEGERS ---Expression: 2 = 4 >> 1 Decimal: val=4 res=2 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000010 NOTE: copy of sign bit shifted into left sideExpression: 1 = 4 >> 2 Decimal: val=4 res=1 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000001Expression: 0 = 4 >> 3 Decimal: val=4 res=0 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000000 NOTE: bits shift out right sideExpression: 0 = 4 >> 4 Decimal: val=4 res=0 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000000 NOTE: same result as above; can not shift beyond 0--- BIT SHIFT RIGHT ON NEGATIVE INTEGERS ---Expression: -2 = -4 >> 1 Decimal: val=-4 res=-2 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111110 NOTE: copy of sign bit shifted into left sideExpression: -1 = -4 >> 2 Decimal: val=-4 res=-1 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111111 NOTE: bits shift out right sideExpression: -1 = -4 >> 3 Decimal: val=-4 res=-1 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111111 NOTE: same result as above; can not shift beyond -1--- BIT SHIFT LEFT ON POSITIVE INTEGERS ---Expression: 8 = 4 << 1 Decimal: val=4 res=8 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000001000 NOTE: zeros fill in right sideExpression: 1073741824 = 4 << 28 Decimal: val=4 res=1073741824 Binary: val=00000000000000000000000000000100 res=01000000000000000000000000000000Expression: -2147483648 = 4 << 29 Decimal: val=4 res=-2147483648 Binary: val=00000000000000000000000000000100 res=10000000000000000000000000000000 NOTE: sign bits get shifted outExpression: 0 = 4 << 30 Decimal: val=4 res=0 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000000 NOTE: bits shift out left side--- BIT SHIFT LEFT ON NEGATIVE INTEGERS ---Expression: -8 = -4 << 1 Decimal: val=-4 res=-8 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111000 NOTE: zeros fill in right sideExpression: -2147483648 = -4 << 29 Decimal: val=-4 res=-2147483648 Binary: val=11111111111111111111111111111100 res=10000000000000000000000000000000Expression: 0 = -4 << 30 Decimal: val=-4 res=0 Binary: val=11111111111111111111111111111100 res=00000000000000000000000000000000 NOTE: bits shift out left side, including sign bit

以上例程在 64 位機器上的輸出:

--- BIT SHIFT RIGHT ON POSITIVE INTEGERS ---Expression: 2 = 4 >> 1 Decimal: val=4 res=2 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000010 NOTE: copy of sign bit shifted into left sideExpression: 1 = 4 >> 2 Decimal: val=4 res=1 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000001Expression: 0 = 4 >> 3 Decimal: val=4 res=0 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: bits shift out right sideExpression: 0 = 4 >> 4 Decimal: val=4 res=0 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: same result as above; can not shift beyond 0--- BIT SHIFT RIGHT ON NEGATIVE INTEGERS ---Expression: -2 = -4 >> 1 Decimal: val=-4 res=-2 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111110 NOTE: copy of sign bit shifted into left sideExpression: -1 = -4 >> 2 Decimal: val=-4 res=-1 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111111 NOTE: bits shift out right sideExpression: -1 = -4 >> 3 Decimal: val=-4 res=-1 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111111 NOTE: same result as above; can not shift beyond -1--- BIT SHIFT LEFT ON POSITIVE INTEGERS ---Expression: 8 = 4 << 1 Decimal: val=4 res=8 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000001000 NOTE: zeros fill in right sideExpression: 4611686018427387904 = 4 << 60 Decimal: val=4 res=4611686018427387904 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0100000000000000000000000000000000000000000000000000000000000000Expression: -9223372036854775808 = 4 << 61 Decimal: val=4 res=-9223372036854775808 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=1000000000000000000000000000000000000000000000000000000000000000 NOTE: sign bits get shifted outExpression: 0 = 4 << 62 Decimal: val=4 res=0 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: bits shift out left side--- BIT SHIFT LEFT ON NEGATIVE INTEGERS ---Expression: -8 = -4 << 1 Decimal: val=-4 res=-8 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111000 NOTE: zeros fill in right sideExpression: -9223372036854775808 = -4 << 61 Decimal: val=-4 res=-9223372036854775808 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1000000000000000000000000000000000000000000000000000000000000000Expression: 0 = -4 << 62 Decimal: val=-4 res=0 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: bits shift out left side, including sign bit

Warning

不要在 32 位系統(tǒng)下向右移超過 32 位。不要在結(jié)果可能超過 32 的情況下左移。使用 gmp 擴展對超出 PHP_INT_MAX 的數(shù)值來進行位操作。

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美亚洲综合视频| 99国产精品久久久久久久| 日韩影院二区| 国产精久久一区二区| 国产中文字幕一区二区三区| 久久男人av| 国产一区2区| 亚洲另类av| 日韩一区精品视频| 亚洲精品99| 中文av在线全新| 久久电影tv| 精品久久中文| 日韩国产欧美一区二区三区| 蜜桃久久久久久| 精品欧美久久| 午夜在线一区二区| 欧美日韩精品免费观看视频完整| 欧美午夜精彩| 女同性一区二区三区人了人一| 欧美aa在线视频| 国产一区91| 国产suv精品一区二区四区视频 | 国产亚洲一区二区手机在线观看| 国产精品久久久久久久免费软件| 97久久亚洲| 日韩欧美美女在线观看| 中文字幕一区二区三区日韩精品 | 激情综合亚洲| 日韩视频免费| 欧美综合二区| 一级成人国产| 国产精品乱战久久久| 日韩有吗在线观看| 日韩有码av| 久久精品人人| 精品三级av在线导航| 久久一区二区三区喷水| 136国产福利精品导航网址| 久久中文字幕av一区二区不卡| 亚洲欧洲午夜| 五月天综合网站| 日韩精品亚洲专区在线观看| 日韩av资源网| 欧美激情视频一区二区三区免费 | 亚洲精品系列| 先锋影音国产一区| 国产调教精品| 麻豆精品蜜桃视频网站| 久久蜜桃资源一区二区老牛| 蜜臀av免费一区二区三区| 日韩免费av| 日韩制服丝袜av| 91麻豆精品| 福利一区和二区| 欧美日韩国产一区二区三区不卡| 蜜桃av一区| 久久香蕉网站| 日韩在线一二三区| 久久国产乱子精品免费女| 久久久久欧美精品| 99精品美女| 宅男在线一区| 精品少妇av| 精品久久91| 亚洲在线观看| 国产精品久久久网站| 久久九九精品| 免费在线观看一区| 群体交乱之放荡娇妻一区二区| 美国三级日本三级久久99| 国产麻豆一区二区三区精品视频| 日韩一区精品视频| 老司机免费视频一区二区三区| 91精品丝袜国产高跟在线| 亚洲性视频在线| 成人精品中文字幕| 国产精品福利在线观看播放| 欧美成人精品午夜一区二区| 久久精品观看| av资源中文在线| 天堂√8在线中文| 亚洲精品一二三**| 免费不卡中文字幕在线| 免费在线视频一区| 久久超级碰碰| 老色鬼久久亚洲一区二区| 日韩精品一区二区三区中文 | 丝袜美腿亚洲色图| 日韩精品中文字幕第1页| 国产一区二区三区免费在线| caoporn视频在线| 国产亚洲一区二区手机在线观看| 日韩视频中文| 综合一区av| 午夜国产一区二区| 久久男人天堂| 亚洲最新av| 国产精品网在线观看| av资源新版天堂在线| 精品国产亚洲日本| 日本欧美国产| 视频一区二区欧美| 国产极品一区| 免费av一区二区三区四区| 日韩中文字幕在线一区| 福利精品在线| 喷白浆一区二区| 免费观看在线色综合| 欧美中文字幕一区二区| 蜜臀久久久久久久| 婷婷综合五月| 在线手机中文字幕| 国产亚洲久久| 日韩精彩视频在线观看| 激情综合在线| 美女福利一区二区三区| 久久久国产精品入口麻豆| 在线视频日韩| 亚洲精品99| www在线观看黄色| 国产欧美激情| 青草国产精品| 亚洲少妇自拍| 久久精品青草| 久久99久久人婷婷精品综合| 视频一区日韩| 日韩不卡在线观看日韩不卡视频 | 首页国产精品| 91亚洲自偷观看高清| 国产精品一区毛片| 欧美综合国产| 中文字幕日韩高清在线| 亚洲大全视频| 99精品99| 久久精品导航| 亚洲调教视频在线观看| 成人高清一区| 欧美激情另类| 国产精品资源| 国产精久久久| 青青草国产精品亚洲专区无| 在线免费观看亚洲| 亚洲精品中文字幕乱码| 午夜一区在线| 日韩在线麻豆| 午夜在线观看免费一区| 欧美日韩激情| 国产高清一区二区| 男人操女人的视频在线观看欧美| 在线精品视频在线观看高清| 91精品91| 欧美成人久久| 久久精品高清| 国产精品人人爽人人做我的可爱| 一区二区三区视频免费观看| 日韩精品免费一区二区在线观看 | 国产探花一区在线观看| 日本99精品| 性欧美长视频| 亚洲日产国产精品| 五月亚洲婷婷| 日韩欧美2区| 欧美一级一区| 亚洲影院天堂中文av色| 欧美日韩午夜| 国产精品白丝久久av网站| 老司机精品视频在线播放| 日韩国产欧美一区二区| 99国产精品一区二区| 免费精品视频最新在线| 亚洲精品高潮| 久久精品99国产精品日本| 国产一区二区三区网| 欧美成人a交片免费看| 日本综合精品一区| yellow在线观看网址| 日韩免费视频| 麻豆国产在线| 中文在线а√在线8| 久久大逼视频| 精品国产一区二区三区噜噜噜| 激情视频一区二区三区| 麻豆精品在线| 日韩中文字幕无砖| 日韩精品第一区| 九九久久婷婷| 中文字幕日本一区二区| 欧美午夜三级| 久久激情网站| 人人爽香蕉精品| 日韩.com| 亚洲精品888| 日韩精品电影一区亚洲| 国产亚洲精品精品国产亚洲综合 | 亚洲日本久久| 日韩综合在线| 亚洲小说春色综合另类电影| 色狠狠一区二区三区| 久久av网址|