C++中實現無符號右移

pamxy發表於2013-07-26

轉自:http://blog.csdn.net/ishallwin/article/details/4795917

在Java及JavaScript中提供了無符號右移操作符“>>>”,無符號右移操作符與普通右移操作符“>>”的區別是>>在右移時將以符號擴充套件原則進行右移,即在右移過程中它將保持原有資料的正負號不變,簡單地說,就是在右移正數時高位補0、右移負數時則高位補1,而無符號右移操作符>>>在右移時不考慮符號問題,即無論右移正數還是負數,其最高位都是補0。

無符號右移本質上是將被右移的數所有儲存位都視為資料位,因此很容易想到,如果想在C++中實現無符號右移,可以先將擬進行無符號右移的數轉換成無符號型別,然後執行普通右移就可以了。

以下是在VS2003中編寫的驗證程式碼:

  1. #include "stdafx.h"  
  2. #include "iostream"  
  3.   
  4. using namespace std;  
  5.   
  6. int _tmain(int argc, _TCHAR* argv[])  
  7. {  
  8.     int nOrg;  
  9.     cout << "被移位數:";  
  10.     cin >> nOrg;  
  11.   
  12.     cout << "有符號右移2位:"   
  13.          << (nOrg >> 2 )   
  14.          << endl;  
  15.   
  16.     unsigned int nuNum = (unsigned)nOrg;  
  17.     cout << "轉換為無符號數:"   
  18.          << nuNum   
  19.          << endl;  
  20.   
  21.     cout << "無符號右移2位:"   
  22.          << (nuNum >> 2 )   
  23.          << endl;  
  24.   
  25.   
  26.     return 0;  
  27. }  

 

夢斷酒醒的部落格http://www.yanzhijun.com


相關文章