顯然的 無論是大於,小於,三元運算,帶短路的&&和||,while,goto,do while都是一種分支 且組語中也會有對應的jmp出現
(n>0)-(n<0)已經是最接近的 但還是用到了大於和小於
為了避免這個 要運用int32在負數符號位是1的性質
只要判斷n>>31&1就能得到n<0了
接著可以判斷n>0 但也可以直接判斷n!=0就好 實作上只要
n=n|n>>16;
n=n|n>>8;
n=n|n>>4;
n=n|n>>2;
n=n|n>>1;
最後無論n原本是多少 只要有任何一個bit是1 他往下的所有bit就都會是1
因此n&1和n!=0是相同的
而由於n>0被我們改成了n!=0 在n<0的情況要多減一
所以(n&1)-((n>>31&1)<<1)就會是最終的答案(上面那堆|記得要做)