14 lines
578 B
Common Lisp
14 lines
578 B
Common Lisp
(defun rotl (x width bits)
|
|
"Compute bitwise left rotation of x by 'bits' bits, represented on 'width' bits"
|
|
(logior (logand (ash x (mod bits width))
|
|
(1- (ash 1 width)))
|
|
(logand (ash x (- (- width (mod bits width))))
|
|
(1- (ash 1 width)))))
|
|
|
|
(defun rotr (x width bits)
|
|
"Compute bitwise right rotation of x by 'bits' bits, represented on 'width' bits"
|
|
(logior (logand (ash x (- (mod bits width)))
|
|
(1- (ash 1 width)))
|
|
(logand (ash x (- width (mod bits width)))
|
|
(1- (ash 1 width)))))
|