[问题] 不用if-else, for, while, do-while取绝

楼主: CaliforCat (加州猫)   2016-04-06 23:33:15
对一个整数取绝对值
如果不用到if-else, for, while, do-while
可以使用什么方法
我想到的都是会用到上列的限制...
请前辈指教 谢谢
作者: Hazukashiine (私は幸せです)   2016-04-06 23:35:00
#include<stdlib.h> int abs(int);
作者: james732 (好人超)   2016-04-06 23:39:00
goto (?)
作者: Hazukashiine (私は幸せです)   2016-04-06 23:41:00
int pos = ((num < 0) ? (num * -1) : (num));
作者: Frozenmouse (*冰之鼠*)   2016-04-06 23:48:00
补数?
作者: Caesar08 (Caesar)   2016-04-06 23:50:00
能请问为什么不能用这些方法吗?
作者: Schottky (顺风相送)   2016-04-06 23:51:00
应该是跟人打赌吧,接受板众插花吗?
作者: x000032001 (版废了该走了)   2016-04-07 00:05:00
相乘再开根号就好啦 国中就有教了(被打
作者: TobyH4cker (Toby (我要当好人))   2016-04-07 00:23:00
num = num & (~(1<<(sizeof(int)*8-1)));这样试试看?我刚想到的错了 ˊˋnum = ((~num) & (~(1 << (sizeof(int)*8 - 1)))) + 1还是不对
作者: ronin728 (浪人)   2016-04-07 03:37:00
(a < 0)? -a : a;
作者: CaptainH (Cannon)   2016-04-07 04:32:00
a*((a>0)*2-1)
作者: TobyH4cker (Toby (我要当好人))   2016-04-07 08:08:00
其实龟毛点上面都算是if-else跟if不过C大的方法让我知道怎么简化了XD
作者: EdisonX (卡卡兽)   2016-04-07 08:28:00
-x = ~x + 1 ??
作者: TobyH4cker (Toby (我要当好人))   2016-04-07 08:31:00
Yes
作者: EdisonX (卡卡兽)   2016-04-07 08:31:00
看错了,忽略我的 @@
作者: kerwinhui (kezza)   2016-04-07 12:17:00
作者: CoNsTaR ((const *))   2016-04-08 02:36:00
不就 num &= -num 就好了吗?对 int 应该是 OK 的呃…应该是(int)((unsigned)num &= (unsigned)-num) 才对
作者: TobyH4cker (Toby (我要当好人))   2016-04-08 09:32:00
-5 & 5 = 1 ?
作者: jackalwei (旅人)   2016-04-08 10:06:00
想到最简单的做法就是,num*(1-2*符号)num为正,符号为0,就为num*1得解,反之*-1,负负得正,亦得解怎么找出符号,只要用shift就可以达成了
作者: newInLA (newInLA)   2016-04-11 07:14:00
没说不能用switch呀,ㄎㄎswitch(num < 0) case true: return (num * -1);
作者: cobrasgo (人鱼线变成鲔鱼线,超帅)   2016-04-11 17:54:00
switch里的严格讲来算是if else

Links booklink

Contact Us: admin [ a t ] ucptt.com