因此,我必須使用按位操作來解決這個問題。試圖解決位級操作難題在C
Should duplicate effect of C expression (x*63),
including overflow behavior.
Examples: multi63(1) = 63
multi63(-1) = -63
Available ops: ! ~ &^| + << >>
也許我不理解的是什麼尋找,但我試着不同的變化,每一次我的結果要麼是真的接近什麼需要返回,但不正確。
這就是我目前正在玩的。我想如果我可以掩飾x,這是1的周長,那麼我會知道我是否乘以負面或正面。
int y = x>>31;
return ~(y^x)
這將返回:
Test times63(2147483647[0x7fffffff]) failed...
...Gives -2147483648[0x80000000]. Should be 2147483585[0x7fffffc1]
,如果我嘗試返回2147483585 [0x7fffffc1]它告訴我,我需要返回-2147483648 [0x80000000的]所以我很困惑,我需要什麼返回。
那麼你怎麼在這裏乘以63? – harold
'y =(x << 6)+〜x + 1',即y = x * 64 + -x'怎麼樣?假設一個普通的二進制補碼機器。 – doynax
啊我甚至沒有想過乘以63,我太集中在正面/負面。謝謝,這很有道理。 – user3769402