关于有符号数跟无符号数的转换

关于有符号数和无符号数的转换

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