轉載自:http://www.94cto.com/index/Article/content/id/59973.html
1.引例:
今天在做了一道關於有符號數和無符號數相互轉換及其左移/右移的問題,被它們之間的轉換原理和位移原理搞得頭大了。真的很后悔本科的時候沒有認真學習《計算機組成原理》/《計算機操作系統》等計算機基礎課程。以下是我根據相關知識回顧和整理的材料,如有和某某的文章有雷同之處,請勿見怪。另外也希望看到這篇文章的同志們能夠有所收獲吧。
#include <cstdio> #include <iostream> using namespace std; int main() { unsigned short int ui; signed short int si; ui = (unsigned short int)0x8000u; si = (signed short int)0x8000; printf("ui = %u\n",ui); printf("si = %d\n",si); ui = ui>>1; si = si>>1; printf("ui = %u\n",ui); printf("si = %d\n",si); cout<<"------------------------------"<<endl; ui = (unsigned short int)0x8000u; si = (signed short int)0x8000; printf("%u\n",ui); printf("%d\n",si); ui = ((signed short int)ui>>1); si = ((unsigned short int)si>>1); printf("%u\n",ui); printf("%d\n",si); cout<<"------------------------------"<<endl; ui = (unsigned short int)0x8000u; si = (signed short int)0x8000; printf("%u\n",ui); printf("%d\n",si); ui = ui<<1; si = si<<1; printf("%u\n",ui); printf("%d\n",si); cout<<"-------------------------------"<<endl