uint16_t v1=200,v2=400;
long int delta = v1-v2;
改这样:
uint16_t v1=200,v2=400;
long int delta = (long int)v1;
delta = delta - v2;
实不行:这样
uint16_t v1=200,v2=400;
long int delta;
if (v1 <0) delta = ((long int)0) - (-v1);
else delta = v1;
delta -= v2;
原理:v1,v2是16bit 两者相减 是16位相减 得到16bit的负数 直接位对位转给32位了
又或. delta = (long int)(v1 - v2); ---------算出16位的负数 再转数据类型, delta = v1 - v2, 没有转数据类型
因为不同的编译器不一定一样,所以自己试一下.
|