有符号数转为无符号数,有符号数通过串口传输
由于有符号数在计算机中的存储方式为:
第一位是符号位。符号为1表示负数;0表示正数。即正数为原码,负数为补码。
无符号数都为原码。
在计算机中,负数以其正值的补码形式表达
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
反码:将二进制数按位取反(0变1,1变0),所得的新二进制数称为原二进制数的反码。
补码:反码加1称为补码。
int16_t inta = -10000; //0xD8F0
uint16_t uinta = 0;
inta = - 10000 二进制为D8F0(补码形式)
有符号数赋值给无符号数,会直接将二进制码赋值过去。
uinta = inta;
此时uinta = 0xD8F0;(原码形式)
转为十进制:inta=-10000,uinta=55536,
如果需要通过串口传输,将int16拆成两个uint8,再拼成16位赋值给int16,数据不会变。
TXBuf[0]=(inta>>8)&0xff;
TXBuf[1]=inta&0xff;
intb=((TXBuf[0]<<8)+TXBuf[1]);
此时intb仍等于inta。