打印

关于2个字节合并成一个字的问题

[复制链接]
3318|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
淡定的牙粉|  楼主 | 2015-9-9 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ccxlslr| | 2015-9-9 22:51 | 只看该作者
不是差不多吗?
C标准,哪个标准忘了。 小于int的,处理时要进行整型提升,这是标准。所以上面那样写是没有问题的。当然如果是你做编译器,不遵守也没有办法。就像运算符的优先级一样,是标准。

使用特权

评论回复
板凳
ayb_ice| | 2015-9-10 06:18 | 只看该作者
上面那个是有隐患的,整形提升C89是没有的

使用特权

评论回复
地板
NE5532| | 2015-9-10 08:53 | 只看该作者
第一个方法,要求编译器隐含强制类型转换,向高精度靠拢了。
第二个方法是很可靠的,楼主的习惯很好,值得表扬。
另外我遇到这种问题,多采用共用体来处理。

使用特权

评论回复
5
ningling_21| | 2015-9-10 09:45 | 只看该作者
如果用上面的写法,如果编译器不是隐式类型转换就只能算错

使用特权

评论回复
6
北京再见2013| | 2015-9-11 14:30 | 只看该作者
union unit_16 //声明一个2 个字节型的联合体
{
unsigned int x;
struct Byte16 //为了不让2个 char 变量也公用同一地址,需要一个结构体
{
unsigned char high;
unsigned char low;
}Bytes;
};

这样写可好?

使用特权

评论回复
7
lianer2002| | 2015-9-11 17:01 | 只看该作者
北京再见2013 发表于 2015-9-11 14:30
union unit_16 //声明一个2 个字节型的联合体
{
unsigned int x;

这样写最好了,不过貌似要注意大小端的问题

使用特权

评论回复
8
wuhenyouyu| | 2015-9-14 08:22 | 只看该作者
ccxlslr 发表于 2015-9-9 22:51
不是差不多吗?
C标准,哪个标准忘了。 小于int的,处理时要进行整型提升,这是标准。所以上面那样写是没有 ...

C是有规定的,但是部分编译器默认是不遵守的,需要手动配置下!比如PIC的编译器,mcc18

使用特权

评论回复
9
ccxlslr| | 2015-9-14 10:00 | 只看该作者
wuhenyouyu 发表于 2015-9-14 08:22
C是有规定的,但是部分编译器默认是不遵守的,需要手动配置下!比如PIC的编译器,mcc18 ...

的确有些编译器为了简化代码不支持,但很多都有设置,像Keil C51某个版本,在编译选项里面就专门有个整型提升选项。

使用特权

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

本版积分规则

16

主题

34

帖子

0

粉丝