If you want to process only "units", then the cycle over all bits is inefficient if there are not many. This is what I would do in this case.
(defmacro do-bits ((var x) &rest body)
"Evaluates [body] forms after binding [var] to each set bit in [x]"
(let ((k (gensym)))
`(do ((,k ,x (logand ,k (1- ,k))))
((= ,k 0))
(let ((,var (logand ,k (- ,k))))
,@body))))
2- , , , - , , .
, ( )