int maximum(int a, int b)
{
long k = (((long)a - (long)b) >> 63) & 1;//取符號位
return b * k + a * (k ^ 1);
}
思路:
問題兩個,一個是怎麼取出int類型的符號位,另一個是超過int類型怎麼辦。
這裏需要了解一下long或者是int類型了。符號位都是在第一位上的,也就是說long類型右移63位就可以拿到。
其中有一點,正數左移高位補0,但是負數左移高位補1.(彙編的知識)
return b * k + a * (k ^ 1)
k就是把符號位取出來,1是負數,0是正數。負數說明b大,所以b1+a0不就是b嗎。反之,如果是正數,說明a大,那麼就是b0+a1就等於 a了。
這裏感謝力扣用戶Ripple 萬分感謝。