c#数据转换的问题: 一个无符号整数(Ushort a),如何转换成一个有符号整数?
既当a<=32767时是正数、当a>大于32767时是负数?求高人用最简便的方法实现。(数据是从下位机传送上来的:把PLC的一个寄存器数据当成有符号整数!传送到PC机里边...
既当a<=32767时是正数、当a>大于32767时是负数?求高人用最简便的方法实现。(数据是从下位机传送上来的:把PLC的一个寄存器数据当成有符号整数!传送到PC机里边已经变换成一个16位的无符号整数,而实际应该是一个有符号整数!)
展开
1个回答
展开全部
大学里搞单片机时经常玩这个,就是做个减法:
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 (同理)
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 (同理)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询