+
+ // sign is -1 (all ones) for negative numbers, 0 otherwise.
+ let sign = self >> ($BITS - 1);
+ // For positive self, sign == 0 so the expression is simply
+ // (self ^ 0) - 0 == self == abs(self).
+ //
+ // For negative self, self ^ sign == self ^ all_ones.
+ // But all_ones ^ self == all_ones - self == -1 - self.
+ // So for negative numbers, (self ^ sign) - sign is
+ // (-1 - self) - -1 == -self == abs(self).
+ //
+ // The subtraction overflows when self is min_value(), because
+ // (-1 - min_value()) - -1 is max_value() - -1 which overflows.
+ // This is exactly when we want self.abs() to overflow.
+ (self ^ sign) - sign