C++除法运算符(/)返回值规则疑问:同号取floor异号取ceil?
C++整数除法的规则解析
你的理解在C++11及后续标准中是正确的,具体对应逻辑如下:
- 当被除数和除数符号相同时,整数除法结果等价于对商取
floor(向下取整),比如5/2=2、(-5)/(-2)=2,和floor(2.5)、floor(2.5)的结果完全一致; - 当被除数和除数符号相反时,结果等价于对商取
ceil(向上取整),比如5/-2=-2、(-5)/2=-2,和ceil(-2.5)、ceil(-2.5)的结果完全一致。
这本质是因为C++11及以后标准明确规定:整数除法的结果是截断向零——直接舍去商的小数部分,只保留整数部分。而截断向零的行为刚好对应了你描述的同号floor、异号ceil的效果。
其他相关规则
- C++11之前的行为:在C++11标准发布前,整数除法的截断方向是实现定义的,不同编译器可能有不同行为(比如部分编译器会采用向负无穷取整,此时无论符号如何都取floor值,例如
(-5)/2会得到-3)。 - 除法与取余的关联:标准规定对于整数
a和b(b不为0),必须满足a = (a/b)*b + a%b。基于这个规则,取余运算%的结果符号始终与被除数a相同,比如(-5)%2=-1、5%-2=1。 - 零值处理:如果被除数为0且除数不为0,结果为0;如果除数为0,会触发未定义行为,程序可能崩溃或产生不可预测的结果。
内容的提问来源于stack exchange,提问作者div3012
相关产品推荐
相关产品推荐

