关于有符号数与无符号数之间的转换

求助关于有符号数与无符号数之间的转换
大家好,我是一名C语言初学者,最经碰到几行代码,有点不明白,希望有人能帮我分析下。如下
int a=5050; //16位单片机中的代码
unsigned b,d,c=32768;
b=(a+c)>>8; //存储a+c的高8位
d=a+c; //存储a+c的低8位

  整段代码的意思是 : a存储用于检验ALU加法运算后的值5050为有符号数,b为一个无符号数变量用于存放转换后数据的高8位,d也为无符号数用于存储转换后数据的低8位。这个代码的运行平台为16位单片机

  我当时问了一下这段代码的作者,我问他为什么要加上一个32768,他当时说因为5050是一个16位有符号数,而b是一个无符号数,所以b=a+32768u以后,就能把有符号数统一转化为无符号数存储起来了(原因是16位有符号数的范围为-32768~32757,,1位无符号数范围为0~65535,所以需要加一个32768)。
  我想请问下,这种用法可以吗?我当时通过其他工具观察到b显示为19,但是我自己在VS上运行,显示的是147,这个数字跟我用计算器算出来的一样,为37818右移8位后的值,所以我不知道到底是怎么回事?是不是中间还有什么环节我没弄明白,请高手指点下,谢谢啊


------解决方案--------------------
这都什么和什么啊。。。。明显错误的做法
5050原本是正数,加32768实际就是最高位置1然后转无符号,显然是不对的,根本不用加,直接转就可以了
b和d的类型要改为unsigned char(因为你只用8位)

------解决方案--------------------
探讨

这都什么和什么啊。。。。明显错误的做法
5050原本是正数,加32768实际就是最高位置1然后转无符号,显然是不对的,根本不用加,直接转就可以了
b和d的类型要改为unsigned char(因为你只用8位)