所以,我正在製作一個Hack CPU模擬器,我想知道計算輸出的最好方法是什麼。將輸出計算結果集中到一個不可讀的行中會比一次一步計算結果更有效嗎?編譯器是否對它進行了優化,使得這兩個選項都很好?基本上,它的這些是更有效 -計算邏輯方程的最佳選擇?
這樣的:
word HackALU(word x, word y, bool zx, bool nx, bool zy, bool ny, bool f, bool no) { x = zx ? 0 : x; y = zy ? 0 : y; x = nx ? ~x : x; y = ny ? ~y : y; word result = f ? x + y : x & y; return no ? ~result : result; }
或本:
word HackALU(word x, word y, bool zx, bool nx, bool zy, bool ny, bool f, bool no) { return no ? ~(f ? ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) + (ny ? ~(zy ? 0 : y) : (zy ? 0 : y))) : ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) & (ny ? ~(zy ? 0 : y) : (zy ? 0 : y)))) : (f ? ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) + (ny ? ~(zy ? 0 : y) : (zy ? 0 : y))) : ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) & (ny ? ~(zy ? 0 : y) : (zy ? 0 : y)))); }
這些似乎並沒有更換分支是相同的代碼。例如,nx在上面的例子中根本不使用,但似乎影響下面的代碼塊的結果。 – 2012-03-20 19:51:24
我犯了一個錯字。它現在已經修復,所以它們應該產生相同的結果。 – Avi 2012-03-21 03:16:06