为什么这个计算不起作用?

时间:2015-07-29 00:51:14

标签: c# operator-precedence

我正在整理一个快速程序,以133字节长度阻止大型机输出,所有这些都以CRLF结束,除了输出中我计算的行数以外,它正在工作。因为输出大小为X字节133字节,最后有2字节(CRLF),所以我计算的行数为:

lineCount = fileLength - 2 / 133;

对于3194的文件长度,可以达到24行。取3194,减去2为CRLF,你得到3192,然后除以133得到24.简单!疯狂的是,我让lineCount等于fileLength

我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

经过多次检查,我终于点击了它!这是臭名昭着的运营秩序的问题!

lineCount = fileLength - 2 / 133;

如果我从左到右评估这个,根据我上面的描述,它工作正常,但我碰巧是一个人,而不是一个CPU。不同的规则!计算机处理器必须使用不同的规则:MiDAS:乘法,除法,加法和减法。

我的代码是计算2/133,对于整数等于0.然后从fileLength减去0,当然将lineCount设置为该值。我很古老的天,有点,应该从一开始就知道更好,但我想我很着急。正确的代码?

int lineCount = ((fileLength - 2) / 133);

所以,请记住MiDAS,你将成为黄金!

注意:实际上它比这更复杂。完整规则包括括号和取幂。有关 Order of Operations 的详细信息,请查看维基百科。

在美国,助记符更像是:PEMDAS - 请原谅我亲爱的姨妈莎莉 - 并提到括号,指数,乘法,除法,加法和减法。