2010/10/18

整数を表現するのに必要なビット数を求める

Common Lisp では integer-length を使う。こんな関数もあったんだね。知らんかった。

シリアライズ処理の際には重宝する。

(loop for i from -8 to 8
do (format t "~a => ~a~&" `(integer-length ,i) (integer-length i)))
;; (INTEGER-LENGTH -8) => 3
;; (INTEGER-LENGTH -7) => 3
;; (INTEGER-LENGTH -6) => 3
;; (INTEGER-LENGTH -5) => 3
;; (INTEGER-LENGTH -4) => 2
;; (INTEGER-LENGTH -3) => 2
;; (INTEGER-LENGTH -2) => 1
;; (INTEGER-LENGTH -1) => 0
;; (INTEGER-LENGTH 0) => 0
;; (INTEGER-LENGTH 1) => 1
;; (INTEGER-LENGTH 2) => 2
;; (INTEGER-LENGTH 3) => 2
;; (INTEGER-LENGTH 4) => 3
;; (INTEGER-LENGTH 5) => 3
;; (INTEGER-LENGTH 6) => 3
;; (INTEGER-LENGTH 7) => 3
;; (INTEGER-LENGTH 8) => 4

0 件のコメント: