网站jianshe,wordpress仿微博,国家开发银行生源地助学贷款网站,网络运营岗位职责分享一波:程序员赚外快-必看的巅峰干货
前言
今天在水群的过程中看到有位群员谈论到这个话题#xff0c;是他找工作过程中某家公司的面试题#xff08;到底是哪家公司才会出这种没营养的题目刁难别人#xff09;#xff0c;有点兴趣#xff0c;就开始写了。 开搞
想了一…分享一波:程序员赚外快-必看的巅峰干货
前言
今天在水群的过程中看到有位群员谈论到这个话题是他找工作过程中某家公司的面试题到底是哪家公司才会出这种没营养的题目刁难别人有点兴趣就开始写了。 开搞
想了一下其实就是题目怪了一点难度其实并不高。这个题目让我想起了前两年看到的题目只给你加法怎么计算加减乘除都说了到底是哪家公司才会出这种没营养的题目。相比起来这题好歹是考了计算机中的加法器而本文主题中谈论的题目则真的是毫无营养。
思路其实很明显位运算这类题目一般都是要用位运算的。这里需要使用到无符号右移。
首先既然不允许直接比较那我就相减嘛a-b结果是0就是相等结果是负数就是a小结果是正数那就是a大。
当然这里是不能直接比较结果的正负的 这样依然不符合提议怎么办呢。
一切的运算在计算机中都是二进制数字也是用二进制表示的而二进制表示数字的时候最高位是代表符号位1是负数0是正数传统的int最高32位。因此我们只需要判断第32位的结果是0还是1就能判断谁大谁小。直接判断第32位肯定不现实这里就需要使用到无符号右移运算符“”。举个简单的例子下面这串二进制只需要无符号右移31位就可以得到最高位的值
1000 0010 1101 0100 1101 0001 0010 0011 无符号右移31位后 0000 0000 0000 0000 0000 0000 0000 0001
结果显而易见最高位降到了最低位其余位全部变成了0因此只要结果是负数那么进行 31 之后的结果转为十进制就是1否则为0。 int a 10;int b 12;int index (a - b) 31;这样我们只需要判断index即可。
那么问题来了题目要求是不允许判断该怎么办呢其实这里可以使用数组下标为0的地方输出ab为1的地方输出ab。
完整代码
public void test() {int a 10;int b 12;int index (a - b) 31;String[] arr {ab, ab};System.out.println(arr[index]);
}至此已经基本可以判断a和b的大小了。但是到这里可以发现ab和ab的情况无法分离这里我们可以继续思考。
当ab时a-b0那么数组0下标位置是否可以直接放ab接着我们把上面的index1结果就变成了1下标位置是大于等于2下标位置是小于。其中等于的情况已经在0下标位置因此1下标位置的结果就是ab了。
String[] arr {“ab”, “ab”, “ab”};
分析到这里思路已经很清晰首先我们计算a-b直接作为下标取arr中的数据如果报错了说明不是0、1、2的情况那么就继续按照上面的思路进行位运算取出1和2下标的值 。
public void test() {int a 13;int b 12;int diff a - b;String[] arr {ab, ab, ab};try {System.out.println(arr[diff]);} catch (ArrayIndexOutOfBoundsException e) {int index diff 31;System.out.println(arr[index 1]);}
}到了这里程序还存在一个bug当a-b2时该程序的判断结果是有问题的因此我们需要把计算结果为2的情况给排除做法很简单把diff这个变量进行有符号左移2位的操作即可如果只移1位当diff为1时计算结果是2不符合题意。左移2位之后的结果绝对值肯定比2要大因此也就杜绝了出现下标为2的情况。
最终代码。
public void test() { int a 14; int b 12; int diff (a - b) 2; String[] arr {“ab”, “ab”, “ab”}; try { System.out.println(arr[diff]); } catch (ArrayIndexOutOfBoundsException e) { int index diff 31; System.out.println(arr[index 1]); } }
最后还是要吐槽一句没事别出这种没营养的面试题刁难人家啦
*************************************优雅的分割线 **********************************
分享一波:程序员赚外快-必看的巅峰干货
如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程
请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更新