面試題 16.07. 最大數值

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 萬分感謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章