php 位移運算符(<<左移和>>右移)

位移運算符

<< 位左移

左移運算的實質是將對應的數據的二進制值逐位左移若干位,並在空出的位置上填0,最高位溢出並捨棄。例 如
$a=10;
$b=$a<<2;
則$b=40,根據手冊描述能夠看出位運算能夠看出向左移一位,則是實現乘2運算。因爲位移操做的運算速度比乘法的 運算速度高不少。所以在處理數據的乘法運算的時,採用位移運算能夠得到較快的速度。
提示 將全部對2的乘法運算轉換爲位移運算,可提升程序的運行效率

示例:
如下三種表達方式是一個意思。
$a = 1024;
for($i=1; $i<$a; $i = $i+$i){
    echo $i."\n";   
}

$a = 1024;
for($i=1; $i<$a; $i = 2*$i){
    echo $i."\n";   
}

$a = 1024;
for($i=1; $i<$a; $i = $i<<1){
    echo $i."\n";   
}
    

>> 位右移
右移運算的實質是將對應的數據的二進制值逐位右移若干位,並捨棄出界的數字。若是當前的數爲無符號數, 高位補零。例如:
$a = 25;//11001
b=a>>2;//等價於:11001 >> 01100, 01100 >> 00110.那麼110 =》 6,即25/4 = 6
b=(0000 0000 0000 0110)=6
若是當前的數據爲有符號數,在進行右移的時候,根據符號位決定左邊補0仍是補1。若是符號位爲0,則左 邊補0;可是若是符號位爲1,則根據不一樣的計算機系統,可能有不一樣的處理方式。
能夠看出位右移運算,能夠實現對除數爲2的整除運算。

提示 將全部對2的整除運算轉換爲位移運算,可提升程序的運行效率 效率


舉例:輸入一個整數,判斷這個數中有幾個二進制位1?例如輸入67,輸出結果應該爲3。由於67的相應二進制數爲00000000 01000011(0043H),有3個1出現。
分析:要判斷是否是1,只須要判斷該位與1與之後是否是1就能夠知道。一個整數,判斷16次便可。

main()
{
int num,k;
int count=0; /* 記錄1的個數 */
scanf(%d,&num);
for(k=0;k<16;k++)
{
if(num&1==1) count++; /* 判斷最低位是否是1 */
num>>=1; /* num右移1位 */
}
printf(%d\n,count);
}

這樣每次都判斷最低位是否是1,判斷完之後,讓前面的右移一位便可。 二進制

相關文章
相關標籤/搜索