转载自: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