/** * @param $a * @param $b * @param $cond */ public function cswapValue(&$a, &$b, $cond) { $size = max(strlen($this->adapter->baseConvert($a, 10, 2)), strlen($this->adapter->baseConvert($b, 10, 2))); $mask = 1 - intval($cond); $mask = str_pad('', $size, $mask, STR_PAD_LEFT); $mask = $this->adapter->baseConvert($mask, 2, 10); $tA = $this->adapter->bitwiseAnd($a, $mask); $tB = $this->adapter->bitwiseAnd($b, $mask); $a = $this->adapter->bitwiseXor($this->adapter->bitwiseXor($a, $b), $tB); $b = $this->adapter->bitwiseXor($this->adapter->bitwiseXor($a, $b), $tA); $a = $this->adapter->bitwiseXor($this->adapter->bitwiseXor($a, $b), $tB); }
/** * @param $integer * @param $bitSize * @return int|string */ public function makeNegative($integer, $bitSize) { return $this->math->bitwiseXor($this->math->leftShift(1, $this->fixSize($bitSize)), $integer); }