首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将uint8_t转换为int8_t

将uint8_t转换为int8_t
EN

Stack Overflow用户
提问于 2015-11-25 21:38:46
回答 2查看 3.5K关注 0票数 1

使用微芯片XC8,我有一个构造

代码语言:javascript
复制
int16_t test;
uint8_t msb = 0xff;
uint8_t lsb = 0xf4;
uint8_t hyst = 0xff; 

test = ((((int16_t)msb)<<8) + (int16_t)lsb) + (int8_t)hyst);

我希望测试结果是-13 (oxFFF3),因为我使用了有符号数字,但它被计算为0xF3。

为什么?

编辑:尝试了一下,结果和我预期的一样。

EN

回答 2

Stack Overflow用户

发布于 2015-11-25 21:47:32

正如Olaf正确指出的那样,如果int的宽度为16,则移位操作可能没有定义的行为,因为您要将一位移位到int16_t的符号位。那么你的代码就是错误的,你不能推断出任何关于你的平台可能实现的价值。

如果int较大,则表达式一切正常,您只需将适合int的正值相加即可。但是由于初始化,结果值将被转换回int16_t,这导致“实现定义的”转换或信号的上升。因此,你应该检查你的编译器文档,你的平台在这些情况下做了什么,如果可以的话,避免它可能是一个好主意。

票数 1
EN

Stack Overflow用户

发布于 2015-11-25 22:25:31

评论中的OK

代码语言:javascript
复制
int16_t test;
uint8_t msb = 0xff;
uint8_t lsb = 0xf4;
uint8_t hyst = 0xff; 

test = (int16_t)(((uint16_t)msb)<<8) + (uint16_t)lsb) + (int8_t)hyst;

解决了问题。谢谢你们!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33917962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档