s*******r 发帖数: 197 | 1 Write a method which finds the maximum of two numbers. You should not
use if-else or any other comparison operator. pg 24
Example
input: 5, 10
output: 10
SOLUTION
Let A = 1st number & B= 2nd number
Step1. Perform operation C = (A-B).
Step2. k = Most significant bit of C , i.e k =1 if B>A else K=0
Step 3. return A - k*C. This will return the maximum of A and B.
题本身不难,不过我不理解,在step2,不用if-else怎么得到most significant bit啊 |
r**u 发帖数: 1567 | 2 int compare(int A, int B) {
unsigned int k;
k = (A - B);
k = k >> 31;
return (1 - k) * A + k * B;
}
【在 s*******r 的大作中提到】 : Write a method which finds the maximum of two numbers. You should not : use if-else or any other comparison operator. pg 24 : Example : input: 5, 10 : output: 10 : SOLUTION : Let A = 1st number & B= 2nd number : Step1. Perform operation C = (A-B). : Step2. k = Most significant bit of C , i.e k =1 if B>A else K=0 : Step 3. return A - k*C. This will return the maximum of A and B.
|
b****r 发帖数: 1272 | |
s*******r 发帖数: 197 | 4 我的问题是因为之前不知道具体有多少位,如何来取这个最高位啊 |
g*******y 发帖数: 1930 | 5 ... >>= sizeof(...)*8
【在 s*******r 的大作中提到】 : 我的问题是因为之前不知道具体有多少位,如何来取这个最高位啊
|
s*******r 发帖数: 197 | 6 不太明白啊,可以展开说说吗
【在 g*******y 的大作中提到】 : ... >>= sizeof(...)*8
|
h**k 发帖数: 3368 | 7 How about this?
return (A+B+abs(A-B))/2 |
g*******y 发帖数: 1930 | 8 k = k>>sizeof(k)*8
还不明白的话,你得回去补补基础知识了。
【在 s*******r 的大作中提到】 : 不太明白啊,可以展开说说吗
|
c***g 发帖数: 472 | 9 恩, 我觉得这个比较好, 初中就学过, 改成减号就是min了
【在 h**k 的大作中提到】 : How about this? : return (A+B+abs(A-B))/2
|
r****o 发帖数: 1950 | 10 这样做可以吗?
ABS函数实现是不是也用到了if?
【在 c***g 的大作中提到】 : 恩, 我觉得这个比较好, 初中就学过, 改成减号就是min了
|
c***g 发帖数: 472 | 11 这个不清楚, 呵呵
【在 r****o 的大作中提到】 : 这样做可以吗? : ABS函数实现是不是也用到了if?
|
c***g 发帖数: 472 | 12 这个不清楚, 呵呵
【在 r****o 的大作中提到】 : 这样做可以吗? : ABS函数实现是不是也用到了if?
|
n********e 发帖数: 518 | |