大学里搞单片机时经常玩这个,就是做个减法:
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 (同理)