注册 登录
编程论坛 C++教室

有个语句里蕴含的逻辑我搞不懂,请指教

okay011 发布于 2012-07-24 16:37, 509 次点击
是操作符 ++ 重载的一段语句:
//....
(1)   Time& operator++(Time& a){                                       //a是时间类形参 包括 second minute hour
(2)     if(!(a.second=(a.second+1)%60) && !(a.minute=(a.minute+1)%60))
(3)    a.hour=(a.hour+1)%24;
(4)   return a;
(5)   }
//....
   第二行和第三行应该是表示时间类自增的结果,但我不理解这语句的逻辑意思。请大大给解释一下,详细点。谢谢~~  另外 “!” 放在语句前是什么意思?
   这两行语句如何表示的时间分量之间的进位关系。。。。。?


[ 本帖最后由 okay011 于 2012-7-24 17:07 编辑 ]
2 回复
#2
westfall9992012-07-24 19:35
if(!(a.second=(a.second+1)%60) && !(a.minute=(a.minute+1)%60))好像表示判断如果已经达到59分59秒,那么再加一秒,分与秒都要复位成xx:00:00的形式,这时小时就要增加1小时.
假设a.second=59,a.minute=59;
if(!(a.second=(59+1)%60) && !(a.minute=(59+1)%60))
等价于if( (!a.second=0) && !(a.minute=0) )
等价于if(!0 && !0)所以结果是真的,下面的a.hour=(a.hour+1)%24;会执行。
#3
fyy3767787852012-07-24 19:38
!放于语句前面是取反的意思,假如表达式为真,取反就是假
!(a.second=(a.second+1)%60)的意思就是第59秒的时候,秒归0 分钟加1
!(a.minute=(a.minute+1)%60))同上
当59分59秒的时候,表达式值都是0,取反为真 小时加一
1