"%"操作符始末---更新一

来源:互联网 发布:linux系统常用软件 编辑:程序博客网 时间:2024/06/10 03:49
发表此帖,谨是为了记录自己的学习历程,同时大家交流一下学习经验,本篇帖子稍后我也会发至我CSDN的博客里。 相信大家对%运算符早已不陌生了,很多同学会叫做取模(mod),但是与其说是取模,不如说取余更恰当一些,因为在大多数语言中,%运算是可以对负数进行操作的,故我认为叫做“取余”更恰当(我也是从其他大大出处接触的这个思想)。 大家最为熟悉的就是整数求余(a%b)就是指计算a中可以容纳多少个b,最后多出来的那部分就是余数,例如:9%4=1,此时,1就是余数,详细来说就是9%4=(4*2)+1,也就是9中最多容纳两个4,外加一个1,因此余数就是1。对于正整数求余实在是太简单了,所以大家都会。关键就在于对于负数的求余,这是很多同学会迷惑不解的。在看本帖子前,有些同学可能会怀疑负数是否能取余,或者对取余运算经常出错,那么看这个帖子就对了,一定让你以后不再出错。首先,我们根据正整数的取余可以得出一个结论,那就是:a=(b*times)+c,则c即为余数,也可改写为:c=a-(b*times),c同样是余数。得出这个结论当然也适用于负整数,当然对负数取余得到的也必定是负数,例如,-9%4=(4*(-2))+(-1),所以余数就是负1。认真的同学可能也会发现,即使把4换成了-4,结果也是一样。所以,又可以得到以下结论:a%b=a%(-b),也就是说%运算符后边的操作数为负数的话,可以将负号忽略掉,结果完全一样。 上边是整数的取余运算,那么问题来了,如果我想对实数取余呢,运算又是怎样的呢?的确,经过我的实践发现,对于不同的语言,对实数的取余操作的确不同。例如:在ruby和python的环境下,-9.1%2=0.90000000000000004,而对于苹果公司新推出的swift语言环境下,-9.1%2=-0.1,在ruby和python下-2.1%2=1.9,而在swift下-2.1%2=-0.1。看到这里是不是已经颠覆了你平常对于%运算的认识,当然,我也一样。 那么,在此处就要补充一点很重要的内容,相对于静态语言(例如:C\C++、Java等)和静态动态相结合的语言(如:swift)上边的预算是正确的,没有问题,但是对于动态语言(例如:ruby、python等)使用上述运算就不完全正确了。 经过实践,我发现当做取余运算时,ruby和pythong会有以下情况:
0 0
原创粉丝点击