[程式語言] 不用 if 的寫法

why?
stan wu wrote:
Hi 各位大大這應該...(恕刪)
kaworucloud wrote:
這三述句與 i = ( i - 1 ) * 4; 同義,str 爆索引的未來清晰可見
特別是第二述句的 i=i|0;,任何值與 0 做 OR 的結果都是原值,此述句的用意究竟是

自我訂正
i=i|0; --> i = i logic OR 0;
C 的寫法應該是 i=i||0;

stan wu wrote:
如果改寫成 完全拋棄不使用 if 或是 ? : 之類的判斷式...


還原成原始形式就沒有 if 了.

if => comparison + conditional jump
conditional jump 的依據是 flag, comparison 會改變 flag.
但是拆解過的動作沒有任何個別部份能與 if 產生等效的結果.

(debug)
mov ax,1
cmp ax,1
mov dx,113
jz 10e
mov dx,117
mov ah,9
int 21
ret
db "yes$"
db "no$"

..... 會不會小題大做了
hxxX54yPZ5HH5VHP\hmpX5gTPh99X5J4Ph00X5YBPjjhexX5exHPDX52JP555554P5ZZ5rr

irs wrote:
還原成原始形式就沒有...(恕刪)
(debug)
mov ax,1
cmp ax,1
mov dx,113
jz 10e
mov dx,117
mov ah,9
int 21
ret
db "yes$"
db "no$"


不對歐 這位大大 你有用到 jmp,

應該要用 ARM 最加化過的 conditional instruction 才算 沒用到 if

不限語言的話 有語法糖可以用

// --- start ---
i==1 AND put "yes" AND exit
put "no"
exit
// --- end ---

shell/Ruby 應該都有類似語法~

softwind1314 wrote:
不對歐 這位大大 你有用到 jmp,


是 cmp 吧, 前面就說這是break down. 也就是說 cmp 或 jz 本身都沒有 if 的效果. 而是組合起來的行為形成 if. 用 conditional instructions 也是依賴 condition field 和 condition flags, 在這個問題上兩者是等效的. (cmp 只影響 flag)

如果你想的是 cmovz 這樣的指令, 會變成用 if 解 if. 因為它本身就是 if .

前面那個不要用 cmp 也可以, 用 xor 0xfffe + shr*16 可以換過來, 只是那樣看起來很蠢.
hxxX54yPZ5HH5VHP\hmpX5gTPh99X5J4Ph00X5YBPjjhexX5exHPDX52JP555554P5ZZ5rr
i=1;
printf(&"No\0Yes"[3*(i==1)])
string[] sOut = new string["no","yes"];
int i=1;
try
{
MessageBox.Show(sOut[i]);
}
catch
{
MessageBox.Show(sOut[0]);
}
int i;

switch(i)
{
case 1:
printf("yes");
break;
default:
printf"no");
}

standia01 wrote:
i=1;printf...(恕刪)


台灣真是高手雲集, 台灣的未來是有希望的, 2行就搞定了, 實在是太強了!



http://stanwu.us

zaza80191 wrote:
string[] s...(恕刪)


這招也是很厲害, 我怎麼沒想到 XD

http://stanwu.us
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!