打印
[开发工具]

紧急求助STVD 整型变量为何赋值不能大于32767

[复制链接]
1648|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gmgmgm|  楼主 | 2015-8-15 09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STVD+COSMIC 开发环境
这个问题发现很久了,一直没找到原因,
如定义一个变量
volatile int  a;或者 unsigned int a;
这个a数值应该在0~65535,但在使用时这个变量超过32767时就会出错,如a=32768,这样赋值就会提示“数据超出范围”。

比如两个此类型变量进行运算,结果大于32767时就会出错,计算结果会是个错误的数据,编译时并不提示警告;
或者在进行条件判断时如 if(a>32768)   这样编译器就是提示警告“数据超出范围”;

有人知道这个问题应该怎么解决吗?谢谢
沙发
戈卫东| | 2015-8-15 09:09 | 只看该作者
16比特的int本来就无法取值到32768,它的取值范围是-32768到32767

使用特权

评论回复
板凳
gmgmgm|  楼主 | 2015-8-15 09:11 | 只看该作者
戈卫东 发表于 2015-8-15 09:09
16比特的int本来就无法取值到32768,它的取值范围是-32768到32767

如超过32767的数值该怎样定义变量?是否该定议为long 长整形方式?

使用特权

评论回复
地板
戈卫东| | 2015-8-15 09:17 | 只看该作者
定义成unsigned int应该可以允许32768~65535的取值。。。。。和运算

使用特权

评论回复
5
gmgmgm|  楼主 | 2015-8-15 09:26 | 只看该作者
戈卫东 发表于 2015-8-15 09:17
定义成unsigned int应该可以允许32768~65535的取值。。。。。和运算

试过这样定议也不行,以前用keil不存在这样的情况,现在蒙了,百度了下,也有网友遇到这样的情况,但并没找到解决的方法,刚开始因为这样的问题搞了好久,运算数据出错了折腾了好久才发现是这个数值超出32767就不行了。

使用特权

评论回复
6
gmgmgm|  楼主 | 2015-8-15 09:44 | 只看该作者
戈卫东 发表于 2015-8-15 09:17
定义成unsigned int应该可以允许32768~65535的取值。。。。。和运算

刚试过了,定义成unsigned int应该可以允许32768~65535的取值  是对的哦,问题解决了,谢谢,结贴了

使用特权

评论回复
7
丁弋宇| | 2015-8-15 09:54 | 只看该作者

这...

使用特权

评论回复
8
diweo| | 2015-8-15 22:20 | 只看该作者
我也是醉了。。。

使用特权

评论回复
9
代理电| | 2015-8-16 01:04 | 只看该作者
有符号和无符号,整数有符号就是双精度。。。

使用特权

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

本版积分规则

135

主题

766

帖子

2

粉丝