Plaster

common-lisp
(defun convert-to-signed (num bits) (if (< (- (1+ (expt 2 (1- bits)))) num (expt 2 (1- bits))) num (let ((base (logand num (1- (expt 2 bits))))) (if (< base (expt 2 (1- bits))) base (1+ (lognot base))))))