查看: 4725|回复: 14

[其他] while语句的疑问

[复制链接]

该用户从未签到

13

主题

52

帖子

0

新手上路

Rank: 1

积分
121
最后登录
1970-1-1
发表于 2010-9-6 19:25:57 | 显示全部楼层 |阅读模式
请问各位,下面两句话有什么区别:
while(!CANCTL0&0X01);和while(!(CANCTL0&0X01));
另外下面两句有什么区别:
while(!CANCTL0&0X01);和
while(!CANCTL0&0X01)

谢谢!
注:这是MC9S08DZ60里面MSCAN部分的语句。
 
我知道答案 目前已有13人回答
回复

使用道具 举报

该用户从未签到

13

主题

52

帖子

0

新手上路

Rank: 1

积分
121
最后登录
1970-1-1
 楼主| 发表于 2010-9-6 19:27:57 | 显示全部楼层

RE:while语句的疑问 补充

第一组的两句话中CANCTL0分别是什么值,语句就会继续向下执行了呢?
谢谢!
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2010-9-6 19:38:50 | 显示全部楼层

    RE:while语句的疑问

    while(!(CANCTL0&0X01));意思一样。
    你要学会看寄存器的说明,CANCTL0 & 0x01 = 取CANCTL0的最后一位来做标志位判断。
    CANCTL0中的INITRQ位表示CAN总线在初始化中,这里的意思大概是判断初始化是否完成。
    该会员没有填写今日想说内容.

    该用户从未签到

    13

    主题

    52

    帖子

    0

    新手上路

    Rank: 1

    积分
    121
    最后登录
    1970-1-1
     楼主| 发表于 2010-9-6 19:50:58 | 显示全部楼层

    RE:while语句的疑问

    就是说这两句意思是一样的?
    while(!CANCTL0&0X01);和while(!(CANCTL0&0X01));
    应该都是CANCTL0寄存器的0位等于1,然后内部为真,再加一个!后是假,所以跳出while语句,继续向下执行吗?
    (这一句话是active MSCAN init mode,下面还有一句是判断寄存器CANCTL1的,是enter init mode)
    那下面两句呢?区别就是最后的分号拿在另一行了,有什么不同呢?
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2010-9-7 07:33:36 | 显示全部楼层

    RE:while语句的疑问

    !CANCTL0&0X01
    不都是一样吗?你可以一下!和&哪个优先级高就知道这个是怎么操作的了。
    另外,这个循环这样使用就是等待某个事件完成。完成以后就会向下走。
    该会员没有填写今日想说内容.

    该用户从未签到

    13

    主题

    52

    帖子

    0

    新手上路

    Rank: 1

    积分
    121
    最后登录
    1970-1-1
     楼主| 发表于 2010-9-7 10:07:30 | 显示全部楼层

    RE:while语句的疑问

    安老师,这我大概明白了。
    那下面这两句有什么区别呢?
    while(!CANCTL0&0X01);和
    while(!CANCTL0&0X01)

    请安老师指教,谢谢!
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2010-9-7 14:09:06 | 显示全部楼层

    RE:while语句的疑问

    这4个不是一样吗?都是对CANCTL0的最低位进行判断。
    该会员没有填写今日想说内容.

    该用户从未签到

    13

    主题

    52

    帖子

    0

    新手上路

    Rank: 1

    积分
    121
    最后登录
    1970-1-1
     楼主| 发表于 2010-9-7 15:42:19 | 显示全部楼层

    RE:while语句的疑问

    while(!CANCTL0&0X01);和
    while(!CANCTL0&0X01)

    这两句话我请教的问题是下一句的分号他在程序中是放在第二行的,这和在同一行有什么区别吗?

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    2
    最后登录
    1970-1-1
    发表于 2010-9-7 16:29:31 | 显示全部楼层

    回复:while语句的疑问

    回复第 3 楼 安 于2010-09-06 11:38:50发表:
    while(!(CANCTL0&0X01));意思一样。
    你要学会看寄存器的说明,CANCTL0 & 0x01 = 取CANCTL0的最后一位来做标志位判断。
    CANCTL0中的INITRQ位表示CAN总线在初始化中,这里的意思大概是判断初始化是否完成。 

    while(!CANCTL0&0X01);和while(!(CANCTL0&0X01));这两句还是有差别的吧,!和&的运算优先级不一样,所以要注意先算非还是先算与!!!!

    该用户从未签到

    27

    主题

    418

    帖子

    0

    新手上路

    Rank: 1

    积分
    228
    最后登录
    1970-1-1
    发表于 2010-9-7 16:30:13 | 显示全部楼层

    RE:while语句的疑问

    第一句与第二句不一样
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 00:18 , Processed in 0.102953 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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