[STM8]

32bit负数怎么表示?很蛋疼啊

[复制链接]
2147|7
手机看帖
扫描二维码
随时随地手机跟帖
lanmanck|  楼主 | 2017-6-6 22:06 | 显示全部楼层 |阅读模式
试了下,他妈的int 是16bit的,只好换成Long int,不然移位都不对。更蛋疼的是这个:
uint16_t v1=200,v2=400;
long int delta = v1-v2;
结果delta出来16bit的负数形式,但因为是long int,那就是0x0000Fxxx,以32bit来表示就是正数。
请问大侠,如何使用负数32bit?
lanmanck|  楼主 | 2017-6-6 22:08 | 显示全部楼层
实例:

QQ截图20170606220834.png

使用特权

评论回复
戈卫东| | 2017-6-6 23:53 | 显示全部楼层
long int delta = (int)v1-v2;
不知道这样行不行。不同工具可能会做不同的转换。

使用特权

评论回复
lai832| | 2017-6-7 01:58 | 显示全部楼层
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,  没有转数据类型

因为不同的编译器不一定一样,所以自己试一下.

使用特权

评论回复
lanmanck|  楼主 | 2017-6-7 09:14 | 显示全部楼层
lai832 发表于 2017-6-7 01:58
uint16_t v1=200,v2=400;
long int delta = v1-v2;
改这样:

是的,强制转换,或者直接定义成long来计算。真坑爹啊。

使用特权

评论回复
icecut| | 2017-6-7 10:14 | 显示全部楼层
lanmanck 发表于 2017-6-7 09:14
是的,强制转换,或者直接定义成long来计算。真坑爹啊。

没办法,c语言就是这么设计的.因为你用int16是不必要的,给你自己找麻烦

使用特权

评论回复
lanmanck|  楼主 | 2017-6-9 08:55 | 显示全部楼层
icecut 发表于 2017-6-7 10:14
没办法,c语言就是这么设计的.因为你用int16是不必要的,给你自己找麻烦

跟c语言有毛关系,二货

使用特权

评论回复
icecut| | 2017-6-9 10:49 | 显示全部楼层
lanmanck 发表于 2017-6-9 08:55
跟c语言有毛关系,二货

你用vc6 验证一下.证明一下二货...
我以为你用stm32. 如果stm8的话...呵呵.都是c语言惹的祸...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

153

主题

397

帖子

3

粉丝