c#数据转换的问题: 一个无符号整数(Ushort a),如何转换成一个有符号整数?

既当a<=32767时是正数、当a>大于32767时是负数?求高人用最简便的方法实现。(数据是从下位机传送上来的:把PLC的一个寄存器数据当成有符号整数!传送到PC机里边... 既当a<=32767时是正数、当a>大于32767时是负数?求高人用最简便的方法实现。(数据是从下位机传送上来的:把PLC的一个寄存器数据当成有符号整数!传送到PC机里边已经变换成一个16位的无符号整数,而实际应该是一个有符号整数!) 展开
 我来答
百度网友1950a79df
2012-05-03 · TA获得超过933个赞
知道小有建树答主
回答量:312
采纳率:0%
帮助的人:362万
展开全部
大学里搞单片机时经常玩这个,就是做个减法:
int b;
if(a<=32767) b=a;
else b=a-65536;
简洁一点,c#:b= a - ((a<=32767)?0:65536);

解释一下,用最高位为1来标示负数的情况下,3种进制类型间的转换是这样的:
无符号DEC HEX 有符号DEC
65535 FFFF -1 (因为FFFF+1=0,最高位溢出,就没有了)
65534 FFFE -2 (同理,FFFE+2=0)
... ...
32768 8000 -32768 (同理)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式