如果现在给你出道题,有一个30人的队伍,希望你以每8人为一排排成行,能有多少行,你怎么来写这个表达式呢?
早先我用的笨方法就是:
public static void main(String[] args) {
int sum = 30;
int row = sum >> 3; // sum / 8;
if (sum % 8 != 0) {
row += 1;
}
System.out.println("row=" + row);
}
结果:row=4
现在可以用这样的方法写:
public static void main(String[] args) {
int sum = 30;
int row = (30 + 7) >> 3;
System.out.println("row=" + row);
}
结果:row=4
这种方式经常在开源代码中见到,单从效率上讲,后者的效率明显更高效 —— + 比 % 的速度快!
题外话:记得之前面试的时候被问过:你遇到过什么难题?对于程序员而言,其实没什么难题可言,只有知道与不知道的区别。如果把上面这道题放到面试笔试题中,有的人可能就会答出我第一种方式,但这并不代表他能力不行,他只是不知道还有后面这种方式的写法而已。所以,这里我也想替自己以及和自己有相同遭遇的朋友们说句话:不要仅仅因为一道比较偏颇的题就对一个人下结论,行与不行在于他的理解,学习能力,多看看他人的闪光点,给他人一个机会,也是在给自己留机会。