渥太华IT面试编程试题 (中级)

a = 14, b = 9

a ^= b; //a = a XOR b 1110 xor 1001 = 0111
b ^= a; //b = b XOR a; 1001 xor 0111 = 1110
a ^= b; //a = a XOR b; 0111 xor 1110 = 1001
 
你们太牛了 :cool::cool::cool:

试题 2. Write a function to find the maximum of two numbers. You should not use if-else or any other comparison operator.
 
the maximum of two numbers? 是max(a,b)的意思吗?
 
return b + (sqrt((a-b)*(a-b)) + (a-b))/2; //assuming abs(a,b) uses if-else
 
这个办法对floating number没啥用

public static void max (byte a, byte b) {
max((long)a, (long)b);
}
public static void max (short a, short b) {
max((long)a, (long)b);
}
public static void max (int a, int b) {
max((long)a, (long)b);
}
public static void max (long a, long b) {
long diff = a - b;
long max = a - diff * (diff >> (Long.SIZE - 1) & 1);
System.out.println(max);
}
原理就是利用bit operator的好处,找到数字最左边的sign bit,然后利用那个来计算差额。
如果a-b小于0的话,就变成了 a - (1)*(差额)也就是b
如果a-b大于0的话,就变成了 a - (0)*(差额)也就是a
 
这个办法对floating number没啥用

public static void max (byte a, byte b) {
max((long)a, (long)b);
}
public static void max (short a, short b) {
max((long)a, (long)b);
}
public static void max (int a, int b) {
max((long)a, (long)b);
}
public static void max (long a, long b) {
long diff = a - b;
long max = a - diff * (diff >> (Long.SIZE - 1) & 1);
System.out.println(max);
}
原理就是利用bit operator的好处,找到数字最左边的sign bit,然后利用那个来计算差额。
如果a-b小于0的话,就变成了 a - (1)*(差额)也就是b
如果a-b大于0的话,就变成了 a - (0)*(差额)也就是a

哈哈 我之前还想如果(uint)会怎么样呢……
原题要求是integer(long, int)还是floating (real)有很大区别啊。
 
后退
顶部