PHP 的 << 和 >> 位移運算子

來源:互聯網
上載者:User

標籤:位元運算   結果   根據   數字   乘法   無符號   數位   二進位   echo   

先舉兩個例子

1 $b = 10;2 $b = $b << 3;3 echo $b; //輸出 80
$b = 10;$b = $b >> 3;echo $b; //輸出 1

可以發現  左位移會乘以相應的數   而 右位移會除以相應的數 如果得出浮點數,舍掉小數位,只取整數,位移運算其實是對位元的操作

 

位移運算子

<< 位左移

左移運算的實質是將對應的資料的二進位值逐位左移若干位,並在空出的位置上填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,判斷完以後,讓前面的右移一位即可。

轉載自  http://www.cnblogs.com/lbnnbs/p/5883799.html

PHP 的 << 和 >> 位移運算子

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.