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

2024-12-03 18:03:10
推荐回答(1个)
回答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 (同理)