OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3585|回复: 4

一个关于移位的问题

[复制链接]

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-22
在线时间
21 小时
发表于 2016-2-21 07:21:14 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 zhubeilife 于 2016-2-21 14:54 编辑

程序如下:
  1. unsigend char A,B,C;
  2. long int Resulst;
  3. A = 0xff;
  4. B = 0xff;
  5. C = 0xff;
复制代码
如果表达式为:
  1. Result = (A<<16) + (B<<8) + C;
  2. 结果为:0x00FFFF
复制代码
我发现因为是数据类型的原因,所以我加了强制类型转换,但是结果如下:

  1. Result = ((long int)A<<16) + (B<<8) + C;
  2. 结果为:0x00FEFFFF
复制代码
我一直没有想明白为啥得到的结果为FE,请大家帮我看一下,十分感谢


最佳答案

查看完整内容[请看2#楼]

注意优先级问题,+的优先级大于
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1684
金钱
1684
注册时间
2014-2-25
在线时间
230 小时
发表于 2016-2-21 07:21:15 | 显示全部楼层
注意优先级问题,+的优先级大于<<的优先级,所以这样写 Result = (A<<16) + (B<<8) + C;
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-22
在线时间
21 小时
 楼主| 发表于 2016-2-21 14:54:36 | 显示全部楼层
1201yuge 发表于 2016-2-21 09:26
注意优先级问题,+的优先级大于

不好意思,贴代码的时候忘了加括号了
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1684
金钱
1684
注册时间
2014-2-25
在线时间
230 小时
发表于 2016-2-21 16:48:54 | 显示全部楼层
zhubeilife 发表于 2016-2-21 14:54
不好意思,贴代码的时候忘了加括号了

你是用什么编译器计算出来的结果?
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-2-21 20:45:18 | 显示全部楼层
B左移8也不对吧,先把B转成INT 型,试试
我有故事,你有酒吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表