看板 C_and_CPP 關於我們 聯絡資訊
對一個整數取絕對值 如果不用到if-else, for, while, do-while 可以使用什麼方法 我想到的都是會用到上列的限制... 請前輩指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.148.56 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1459956797.A.FD4.html ※ 編輯: CaliforCat (182.234.148.56), 04/06/2016 23:35:25
Hazukashiine: #include<stdlib.h> int abs(int); 04/06 23:35
james732: goto (?) 04/06 23:39
Hazukashiine: int pos = ((num < 0) ? (num * -1) : (num)); 04/06 23:41
Frozenmouse: 補數? 04/06 23:48
Caesar08: 能請問為甚麼不能用這些方法嗎? 04/06 23:50
Schottky: 應該是跟人打賭吧,接受板眾插花嗎? 04/06 23:51
x000032001: 相乘再開根號就好啦 國中就有教了(被打 04/07 00:05
TobyH4cker: num = num & (~(1<<(sizeof(int)*8-1))); 04/07 00:23
TobyH4cker: 這樣試試看?我剛想到的 04/07 00:23
TobyH4cker: 錯了 ˊˋ 04/07 00:25
TobyH4cker: num = ((~num) & (~(1 << (sizeof(int)*8 - 1)))) + 1 04/07 00:25
TobyH4cker: 還是不對 04/07 00:28
ronin728: (a < 0)? -a : a; 04/07 03:37
CaptainH: a*((a>0)*2-1) 04/07 04:32
TobyH4cker: 其實龜毛點上面都算是if-else跟if 04/07 08:08
TobyH4cker: 不過C大的方法讓我知道怎麼簡化了XD 04/07 08:11
EdisonX: -x = ~x + 1 ?? 04/07 08:28
TobyH4cker: Yes 04/07 08:31
EdisonX: 看錯了,忽略我的 @@ 04/07 08:31
CoNsTaR: 不就 num &= -num 就好了嗎? 04/08 02:36
CoNsTaR: 對 int 應該是 OK 的 04/08 02:37
CoNsTaR: 呃…應該是(int)((unsigned)num &= (unsigned)-num) 才 04/08 07:39
CoNsTaR: 對 04/08 07:39
TobyH4cker: -5 & 5 = 1 ? 04/08 09:32
jackalwei: 想到最簡單的做法就是,num*(1-2*符號)num為正,符號 04/08 10:06
jackalwei: 為0,就為num*1得解,反之*-1,負負得正,亦得解 04/08 10:06
jackalwei: 怎麼找出符號,只要用shift就可以達成了 04/08 10:07
newInLA: 沒說不能用switch呀,ㄎㄎ 04/11 07:14
newInLA: switch(num < 0) case true: return (num * -1); 04/11 07:15
cobrasgo: switch裡的嚴格講來算是if else 04/11 17:54