找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2768|回复: 11
打印 上一主题 下一主题
收起左侧

没搞懂这两句代码结果为啥不一样

[复制链接]
跳转到指定楼层
楼主
ID:844772 发表于 2021-1-29 11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Time_h=(i/16)*10+i%16;
Time_h=(i>>4)*10+i&0x0f;
前一句就可以,后一句十位不对,但把i&0x0f放前边就行了,难到时编译器的问题?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:752974 发表于 2021-1-29 12:49 | 只看该作者
抛开物理意义,单看数值,这两条语句功能等同。
回复

使用道具 举报

板凳
ID:824490 发表于 2021-1-29 13:21 | 只看该作者
从左到右:i>>4之后,i的值变了。到了i&0x0f,这时的i已不 原来的i,
而前一句i至始至终没改过
回复

使用道具 举报

地板
ID:844772 发表于 2021-1-29 13:22 | 只看该作者
本来习惯用第一种写法,昨天脑抽写了第二种的,显示的就总出错,刚刚突然琢磨出来,Keil居然是先加后与。
回复

使用道具 举报

5#
ID:824490 发表于 2021-1-29 13:27 | 只看该作者
glinfei 发表于 2021-1-29 13:22
本来习惯用第一种写法,昨天脑抽写了第二种的,显示的就总出错,刚刚突然琢磨出来,Keil居然是先加后与。

Time_h=(i>>4)*10+(i&0x0f);试试
回复

使用道具 举报

6#
ID:392485 发表于 2021-1-29 13:46 | 只看该作者
C语言中+ - 的运算优先级要高于&(位与),&(取地址)运算要高于+ - 运算。
回复

使用道具 举报

7#
ID:213173 发表于 2021-1-29 14:00 | 只看该作者
优先级和结合性
C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合, 执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。 C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
回复

使用道具 举报

8#
ID:844772 发表于 2021-1-29 15:00 | 只看该作者
名字不是重点 发表于 2021-1-29 13:27
Time_h=(i>>4)*10+(i&0x0f);试试

试过了,就是忘记优先顺序了,还以为发现编译器的bug呢
回复

使用道具 举报

9#
ID:654028 发表于 2021-1-29 16:23 | 只看该作者
我从来不记优先级,都是用括号
回复

使用道具 举报

10#
ID:712493 发表于 2021-1-29 19:58 | 只看该作者
名字不是重点 发表于 2021-1-29 13:21
从左到右:i>>4之后,i的值变了。到了i&0x0f,这时的i已不 原来的i,
而前一句i至始至终没改过

对的,是这样!
回复

使用道具 举报

11#
ID:130230 发表于 2023-2-22 11:23 | 只看该作者
运算符结合的问题,基础不扎实。去看看C语言基础教程。
回复

使用道具 举报

12#
ID:879348 发表于 2023-2-22 11:44 | 只看该作者
写程序要多加括号,不要想当然
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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