众所周知Unsigned Short的负数是以1开头的(比如short的-1,即0XFFFF,即1111 1111 1111 1111)
利用这个特性,可以:判断n-5是否是负数(因为大于4的整数,即大于等于五,小于五的就不大于四),类比得出12-n是否是负数
再将(n-5)|(12-n),若都满足应当为(0...)|(0...)
那么结果为0...,否则为1...
在运用右移取第一位,即上述0的位置的数字
即0XXX XXXX XXXX XXXX 取出0
可以使用 >> 15,将0右移动15位,从16到第1位(你可以这么理解)
最后由于满足为0,不满足为1,需要取反,即^1
贴代码:
... = ((((n-5)|(12-n))&0x8000)>>15) ^ 1