php按位與
⑴ php中的運算符有哪些
A選項,看下圖:
不用全部記住,記住平時比較常用的就行了,還有記住:算術運算符>關系運算符>邏輯運算符>賦值運算符。
(1)php按位與擴展閱讀:
PHP 中的運算符分為:四則運算符、邏輯運算符、三目運算符和位運算符。
運算符優先順序指定了兩個表達式綁定得有多「緊密」。例如,表達式 1 + 5 * 3 的結果是 16 而不是 18 是因為乘號(「*」)的優先順序比加號(「+」)高。
必要時可握棗以用括弧來強制改變優先順序。例如:(1 + 5) * 3 的值為 18。如果運算符優先順序相同,則使用從左到右的左聯順序。
對字元串和數字進褲皮慎行加胡敬法運算。
請看這些例子:
x = 5 + 5; document.write(x); x = "5" + "5"; document.write(x); x = 5 + "5"; document.write(x); x = "5" + 5; document.write(x)。
x = 5 + 5; document.write(x); x = "5" + "5"; document.write(x); x = 5 + "5"; document.write(x); x = "5" + 5; document.write(x)。
⑵ 按位運算作用是什麼
按位運算符的作用就是直接對整數在內存中的二進制位進行操作。將一個地址和一個10H進行按位,具體要看在哪一種程序語言中,以及使用哪一種類型的按位運算符。
按位與運算符"&"是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下局源早: 00001001 (9的二進制補碼)&00000101 (5的二進制補碼) 00000001 (1的二進制補碼)可見9&5=1。
按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進制數為0000000011111111)。
(2)php按位與擴展閱讀:
c語言中,按位運算符的運算優先順序共分為15 級。1 級最高,15 級最低。在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的按位運算符優先順序相同時,則按運桐雀算符的結合性所規定的結合方向處理。「 & 」按位與運算符屬於十級,優先順序較低。
按位裂肢運算符中的樹狀數組是一個查詢和修改復雜度都為log(n)的數據結構。主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改一個元素的值;經過簡單修改可以在log(n)的復雜度下進行范圍修改,但是這時只能查詢其中一個元素的值(如果加入多個輔助數組則可以實現區間修改與區間查詢)。
參考資料來源:網路—位運算
⑶ php中兩個整型數組能不能進行按位或運算(就像c語言和matlab的&運算符一樣)舉個例子吧,這
給你一個與運算的,或運算的直接改一下&=>||
functiona($ar,$br){
foreach($aras$key=>$value){
$cr[]=$value&$br[$key];
}
return$cr;
}
$ar=array(0,0,1,1);
$br=array(1,0,1,0);
print_r(a($ar,$br));
⑷ 位(bit)運算
一、二進制:所謂二進制就是逢二進一 (0,1), 因為使用二進制只有 0, 1 兩個數,簡單,易於電子方式實現 , 同時,通過0,1 組合可以表示任意一個數.
二進制有三個重要的概念:
1.原碼
用二進制來表示一個數,這個碼就是原碼.
1 ------> 原碼 00000000 0000000 0000000 00000101 = 1 2的零次方+0 2的一次方+1* 2的二次方=1+0+4=5
2.負數的反碼=它的原碼符號缺猛位不變,其它位取反(0->1,1->0)
反碼(正數的反碼和它的原碼一樣 , 負數反碼 是 符號位不變其它位取反)
補碼(正數的補碼和它的原碼一樣,負數的補碼是 它的反碼+1)
舉例
-1
-1的原碼 10000000 00000000 00000000 00000001
-1的反碼 11111111 11111111 11111111 11111110
-1 的補碼 11111111 11111111 111111111 11111111
3. 在計算機運算的時候,都是以補碼的方式來運算的
4+5=>計算機 4-5=4+(-5)
這句話意思就是,不管一個數是正數還是負數,都要被轉成補碼,然後進行運算.
位運算一覽表:
該圖的前面四個是位運算
其運算規則是:
按位與&:兩位全為1,結果為1
按位或| : 兩位有一個為1,結果為1
按位異或 ^ : 兩位一個為0,一個為1,結果為1
按位取反 : 0->1 ,1->0
<h3>求解:~2=?</h3>
步驟 : 首先要求出 2的補碼
2是正數 所以 原碼=反碼=補碼
2 原碼
00000000 00000000 00000000 00000010
~2
11111111 11111111 11111111 11111101 (補碼)->原碼
? 負數的 原碼-》反碼-》補碼
11111111 11111111 11111111 11111101->
推出其反碼 (對補碼-1)
11111111 11111111 11111111 11111100
推出原碼
10000000 00000000 00000000 0000011 -> -3
~-5=?
-5 的 補碼找出來.
-5 原碼 10000000 00000000 00000000 00000101
-5 反碼 11111111 11111111 11111111 11111010
-5 補碼 11111111 11111111 11111111 11111011
~-5取反 00000000 00000000 00000000 00000100 (補碼)
4
3 的補碼 00000000 00000000 00000000 00000011
2&3 00000000 00000000 00000000 00000010 [補碼]
2 的補碼 00000000 00000000 00000000 00000010
3 的補碼 00000000 00000000 00000000 00000011
2^3 00000000 00000000 00000000 00000001
二:位移運算:在php 中位運算有兩種 >> (右移) << (左移)
運算的規則是 :
算術右移:低位溢出,符號位不變,並用符號位補溢出的高位
算術左移: 符號位不變,低位補0
根悶宴據我們前面的規范,來完成幾個案例
$a=1>>2;
1 的補碼
00000000 00000000 00000000 00000001
1>>2
00000000 00000000 00000000 00000000
$b=-1>>2;
$c=1<<2;
1<<伏罩橋2
1的補碼
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000100
⑸ 為什麼要在PHP中使用按位/掩碼
Bars bar = new Bars();
bar.setId(rs.getLong("id"));
bar.setName(rs.getString("name"));
bar.setType(rs.getInt("type"));
bar.setCreatorId(rs.getLong("creator_id"));
resultList.add(bar);
if (currentNum == skipEnd - 1)
break;
}
⑹ PHP:「^」符號在這里是什麼意思求助!
這是異或運算符,按二進制位進行異或運算(XOR)。
其中:
0^0=0;
1^1=0;
0^1=1;
1^0=1;
舉個例子:
echo101^7;//輸出98
為什麼呢?下面就來分析一下。
101寫成二進制是1100101;
7寫成二進制是111,即0000111(將兩個數的位數補成一樣);
根據前面的表,按位運算:
1100101
^0000111
---------------------
1100010
就得到了二進制數1100010,轉化為十進制就是98。
希望能解開您的疑惑。
參見:維基網路:邏輯異或:
http://zh.wikipedia.org/wiki/%E9%80%BB%E8%BE%91%E5%BC%82%E6%88%96
⑺ php中 & || ^ 的符號意思。
&:這個符號叫「與」,表示左右兩邊的操作數都為「真」時才為「真」,口訣是真真為真,真假為假,假真為假,假假為假;
||:這個符號叫「或」,表示左右兩邊的操作數只要有一個為「真」時就為「真」,口訣是真真為真,真假為真,假真為真,假假為假;
^:這個符號叫「非」,表示將右邊的操作數從「真」變成「假(非真)」的結果,從「假」變成「真(非假)」的結果。
⑻ php如何實現js的移位運算符
移位包括有符號左移(<<)、有符號右移(>>)、無符號右移(>>>),其中 js 支持三種移位,PHP只支持前兩種移位(沒查到第三種),恰好需要PHP進行無符號右移,此處實現一下。先看結果
將數字 $a 向右無符號移動 $n 位
[php] view plain
functionuright($a,$n)
{
$c=2147483647>>($n-1);
return$c&($a>>$n);
}
下面是這樣做的理由
1、有符號右移的過程
2 >> 1
2在計算機中存儲的二進製表示為
000000000 00000000 00000000 00000010
向右移動1位,高位補0
000000000 00000000 00000000 00000001
結果為1
-2 >> 1
負數的存儲是以補碼的方式存儲的(相關知識自行了解),這里簡單說明
符號位是 1,-2的表示為
100000000 00000000 00000000 00000010
補碼:除符號位外,其他位按位取反,然後 + 1
11111111 11111111 11111111 11111101
11111111 11111111 11111111 11111110
向右移動1位,高位補1
11111111 11111111 11111111 11111111
結果為 -1(轉換成10進制後)
注意:移位操作是按照計算機中實際存儲的二進制形式進行移動的
2、無符號右移的過程
2 >> 1同上
-2 >> 1
補碼右移1位,高位補 0
01111111 11111111 11111111 11111111
結果是 2147483647
無符號右移 n 位,即把所有位向右移動 n 位(有符號右移),然後把前 n 位變成 0。
要把前 n 位變成 0 ,只需要讓其跟一個前 n 位是 0,後 32-n 位是 1 的數進行按位與就可以了。
構造前 n 位是 0 後 32-n 位是 1 的數:利用正數有符號右移高位補 0 實現,這里用 2147483647 這個正數實現(當然其他數也可以),這個數在計算機中的存儲前面已經說了,是
01111111 11111111 11111111 11111111
利用這個數構造前 n 位是 0 的數,只需將其向右移動 n-1 位就行了
-2 無符號右移 2位的過程
-2右移2位:11111111 11111111 11111111 11111111
構造數: 00111111 11111111 11111111 11111111
按位與: 00111111 11111111 11111111 111111
⑼ $ret = $val & (~ $powbit) php 的什麼意思
~按位取反。
&按位與。
假設$powbit的值是9,換成2進制:1001,按位反吵喊團後就是0110(6);
然後假設$val是12(1100),與6(0110)滲行按位與後是升橘0100(4);
即是$ret就等於4。
⑽ PHP語言PHP語言里的位運算符&、|、^ 、~、〈〈 、〉〉這些符號我一個也不懂,希望高手給個全面的解釋!拜
"&" 按位與運算
按位與運算符"&"是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下:
00001001 (9的二進制補碼)
&00000101 (5的二進制補碼)
00000001 (1的二進制補碼)
<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a&$b);
?>
"|" 按位或運算
按位或運算符「|」是雙目運算符。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
例如:9|5可寫算式如下:
00001001
|00000101
00001101 (十進制為13)可見9|5=13
<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a|$b)."\n"; //二進制
echo sprintf("%d", $a|$b)."\n"; //十進制
"^" 按位異或運算
按位異或運算符「^」是雙目運算符。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下:
00001001
^00000101
00001100 (十進制為12)
<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a^$b)."\n"; //二進制
echo sprintf("%d", $a^$b)."\n"; //十進制
"~" 求反運算
求反運算符~為單目運算符,具有右結合性。其功能是對參與運算的數的各二進位按位求反。
例如~9的運算為:
~(0000000000001001)結果為:1111111111110110
<?php
$a = 9;
$b = 5;
echo sprintf("%b", ~$a)."\n"; //二進制
"〈〈" 左移運算
左移運算符「<<」是雙目運算符。其功能把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數,高位丟棄,低位補0。
例如:
a<<4
指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。
<?php
$a = 3;
$temp = $a<<4;
echo sprintf("%d", $temp)."\n"; //十進制
「>>」 右移運算
右移運算符「>>」是雙目運算符。其功能是把「>> 」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。
例如:
設 a=48,
a>>4
表示把00110000右移為00000011(十進制3)。
應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時,最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定
<?php
$a = 48;
$temp = $a>>4;
echo sprintf("%d", $temp)."\n"; //十進制